微软正式发布了.NETCore并提供下载,其不仅能在Windows操作系统上运行,还能在Linux和MacOSX操作系统上运行,这意味着开发者不仅能使用它来建立自己的应用,还能修改和完善平台,来迎合自己和他人的需求。
功能介绍
.NETCore是.netframework的新一代版本,是微软开发的第一个官方版本,具有跨平台(Windows、MacOSX、Linux)能力的应用程序开发框架(ApplicationFramework),未来也将会支持FreeBSD与Alpine平台,也是微软在一开始发展时就开源的软件平台[1] ,它经常也会拿来和现有的开源.NET平台Mono比较。
由于.NETCore的开发目标是跨平台的.NET平台,因此.NETCore会包含.NETFramework的类库,但与.NETFramework不同的是.NETCore采用包化(Packages)的管理方式,应用程序只需要获取需要的组件即可,与.NETFramework大包式安装的作法截然不同,同时各包亦有独立的版本线(Versionline),不再硬性要求应用程序跟随主线版本。
.NETCore项目的主要目标有:
支持或可以移转(port)到更多的操作系统平台与芯片架构(也就是未来项目会跨出x86平台)。
具有引人注目的性能与高可靠度。
开发人员能快速与直觉的获取.NETCore开发环境。
在直觉与具生产力的情况下建造应用程序,使用文件,示例与NuGet组件。
软件特色
跨平台
可以在Windows,macOS,Linux上运行
灵活的部署机制
1.Portableapplications(便携式应用)
这种部署机制和传统的.NETFramework相似,只要目标平台上存在.NETCoreRuntime即可。
2.Self-containedapplication(自宿主应用)
顾名思义,这种部署机制将应用和运行时共同打包,即便目标平台上没有安装.NETCoreRuntime也能正常使用
第二种方式和.NETNative也是不一样的,仍然使用CoreCLR,而.NETNative使用CoreRT作为运行时,详细信息请见dotnet/corert
命令行工具
.NET程序所有的运行脚本都可以用命令行工具执行(cmd,bash)这里有几个常见的donnet命令
兼容性
通过.NETStandardLibrary与.NETFramework,Xamarin,Mono兼容
开源
.NETCore从属于.NET基金会,由微软进行官方支持。使用MIT和Apache2开源协议,文档协议遵循CC-BY
注意事项
使用.NETCore2.0需要先安装.NETCoreSDK2.0,并且在VisualStudio2017中创建APP。
.NETCoreSDK2.0.0包括了.NETCore2.0.0Runtime,如果下载了SDK就不需要单独下载Runtime了。
更新日志
更新亮点:分层编译(TieredCompilation)
分层编译是一种使运行时能够更自适应地使用实时(JIT)编译器,以在启动时获得更好的性能并最大化吞吐量的功能。该功能在.NETCore2.1中是可选的,然后在.NETCore2.2Preview2中默认启用。不过开发团队认为还没有准备好在正式的.NETCore2.2版本中默认启用它,所以已将其切换回可选功能。
分层编译有望在.NETCore3.0中默认启用。
运行时事件(RuntimeEvents)
我们通常需要监视运行时服务(如当前进程的GC,JIT和ThreadPool),以了解这些服务在运行应用程序时的行为方式。在Windows系统上,这通常使用ETW监视当前进程的ETW事件来完成。虽然这种方法仍然有效,但使用ETW并不总是很容易。在一些低权限环境中,或是在Linux、macOS上,都可能无法使用ETW。
从.NETCore2.2开始,可以使用EventListener类来使用CoreCLR事件。这些事件描述了GC,JIT,ThreadPool和interop的行为。它们在Windows上作为CoreCLRETW提供程序的一部分公开的相同事件。这允许应用使用这些事件或使用传输机制将它们发送到遥测聚合服务。
订阅事件示例代码:
internalsealed classSimpleEventListener:EventListener { //CalledwheneveranEventSourceiscreated. protectedoverridevoidOnEventSourceCreated(EventSourceeventSource) { //Watchforthe.NETruntimeEventSourceandenableallofitsevents. if(eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime")) { EnableEvents(eventSource,EventLevel.Verbose,(EventKeywords)(-1)); } } //Calledwheneveraneventiswritten. protectedoverridevoidOnEventWritten(EventWrittenEventArgseventData) { //Writethecontentsoftheeventtotheconsole. Console.WriteLine($"ThreadID={eventData.OSThreadId}ID={eventData.EventId}Name={eventData.EventName}"); for(inti=0;i<eventData.Payload.Count;i++) { stringpayloadString=eventData.Payload[i]!=null?eventData.Payload[i].ToString():string.Empty; Console.WriteLine($" Name="{eventData.PayloadNames[i]}"Value="{payloadString}""); } Console.WriteLine(" "); } }
SqlConnection支持AccessToken
SQLServer的ADO.NETprovider——SqlClient,现在支持将AccessToken属性设置为使用AzureActiveDirectory以对SQLServer连接进行身份验证。要使用此功能,你可以使用Microsoft.IdentityModel.Clients.ActiveDirectoryNuGet包中包含的ActiveDirectoryAuthenticationLibraryfor.NET获取accesstokenvalue。
使用AzureActivedirectory验证SQLServer连接示例:
//getaccesstokenusingADAL.NETvarauthContext=newAuthenticationContext(authority);varauthResult=awaitauthContext.AcquireTokenAsync(appUri,clientCredential);//setupconnectiontoSQLServervarsqlConnection=newSqlConnection(connectionString);sqlConnection.AccessToken=authResult.AccessToken;awaitsqlConnection.OpenAsync();
此外,该版本还包含InjectingcodepriortoMain,提供WindowsARM32支持等特性。
netframework