.NET Standard 2.0 发布日期:2017年8月14日
公告原文地址html
早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据我的经验,微软的产品通常在2.0时会趋于成熟,因此一个新的.Net开发时代已经来临!将来属于.NET Core。git
对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,本系列相关文章:github
.NET Standard 2.0是基石,因此放在第一篇。web
使用以前,下载安装.NET Core 2.0,下载地址。api
代码共享:.NET Standard是API集合,更是代码实现标准,全部.NET实现必须符合该标准,防止代码碎片化。.NET Standard被设计用来做为替代可移植类库Portable Class Libraries(PCL)的构建工具。架构
API支持:在.NET Standard 2.0中API支持数量增多,包含API数量为32000个,.NET Standard 1.6 中API数量为13000个,目前为止已经包含.NET Framework中的大部分APIs,这意味着能够轻松地将现有代码移植到.NET Standard,从而使现有代码支持基于.NET Standard实现的任何平台,参看平台支持列表。app
.NET Framework兼容模式:目前绝大多数的NuGet软件包使用.NET Framework,大多数项目被禁止引用到.NET Standard项目,因不是全部的项目依赖都支持.NET Standard,这是在.NET Standard 2.0中加入兼容模式的缘由,使.NET Standard项目能够直接引用.NET Framework类库。目前70%的Nuget软件包是兼容.NET Standard 2.0,可能在某些特殊状况下不起会兼容失败,好比:WPF中的.NET Framework类库。async
经过建立一个新项目来实践一下,在VS中 文件
| 新项目
选择.NET Standard分类找到 Class Library (.NET Standard),项目名称为mylibrary
。工具
也能够经过命令行dotnet new
建立一个类库(默认使用.NET Standard)测试
dotnet new lib -o mylibrary
为了让这个类库更加意义,编辑文件Class1.cs as
,添加一行逻辑代码。
using System; namespace mylibrary { public class Class1 { public static string GetMessage() => "Hello from .NET Standard!"; } }
在使用类库以前,须要建立一个项目。建立一个空ASP.NET Core项目。在VS中,建立项目时在.NET Core分类中选择ASP.NET Core Web Application
,选中ASP.NET Core 2.0
,类型为Empty。
命令行建立
dotnet new web -o aspnetcore
使用.NET Standard类库的方式和使用其余类库同样,只须要在项目中添加引用。在VS中右键项目,点击添加/引用,而后在项目(Projects)选项卡中选择 mylibrary。
命令行方式为项目添加引用
dotnet add reference ../mylibrary/mylibrary.csproj
在Startup.cs
文件,添加代码
app.Run(async (context) => { var message = mylibrary.Class1.GetMessage(); await context.Response.WriteAsync(message); });
在VS中F5运行。
命令行工具运行
$ dotnet run Now listening on: http://localhost:50878 Application started. Press Ctrl+C to shut down.
运行效果
恭喜!建立的.NET Standard 2.0类库在.NET Core中调用成功。一样也能够在 .NET Framework或Xamarin等不一样类型的应用中使用,方式同样。
.NET Standard 2.0 提供兼容模式,如今添加一个非.NET Standard类型的NuGet包,如要添加NuGet包为:Huitian.PowerCollections,在VS中右键项目mylibrary
,选择Manage NuGet Packages.,而后选择Browse,搜索Huitian.PowerCollections,在结果中找到包并点击安装。
命令行添加Nuget包
dotnet add package Huitian.PowerCollections
安装完包后,将显示如下警告:
NU1701: Package ‘Huitian.PowerCollections 1.0.0’ was restored using ‘.NETFramework,Version=v4.6.1’ instead of the project target framework ‘.NETStandard,Version=v2.0’. This package may not be fully compatible with your project.
这段警告不只在安装包时提示,在每次构建时都会提示。
警告出现的缘由是由于NuGet没法肯定.NET Framework类库是否可以彻底正常工做。例如,它可能依赖于Windows Forms(不跨平台)。建议测试应用程序,若是全部功能都按预期工做,您能够阻止警告。
编辑项目文件中包引用配置,添加NoWarn属性:
<ItemGroup> <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" /> </ItemGroup>
上面的配置是将Huitian.PowerCollections(版本:1.0.0)
包引用时产生的警告名为NU1701
设置为不提示。
在VS中直接在包的属性中进行设置
再次编译,再也不提示警告信息。注意:配置只针对每一个引用包,不是全局的。所以,若是引用了另外一个须要兼容模式的库,将再次获得警告,须要对该包进行单独设置。
当类库开发完成,能够将其发布成NuGet包,在VS中,右键项目选择属性(Properties),在选项卡中找到Package,选中Generate NuGet package on build
在命令行工具环境下,编辑项目文件添加GeneratePackageOnBuild设置值为true
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>
编译项目,在输出目录中会找到生成的NuGet包。
.NET Standard 2.0发布以后,在.NET项目中共享代码,再也不推荐使用PCL类库,有可能后面会废弃,若是如今使用PCL应该移植为.NET Standard类库。
.NET Standard 2.0 支持API数量是 .NET Standard 1.x 的两倍多,这意味着咱们将.NET Framework 中的代码移植到.NET Standard变得更加顺畅,另外经过兼容模式在.NET Standard类库中能够引用.NET Framework项目或类库,这样容许在没有将全部代码移植到.NET Standard的状况下快速使用现有类库。(提供一个过渡措施,若是代码没有执行到不支持的API是不会出错的。)
几乎全部.NET平台都支持 .NET Standard 2.0,包括.NET Framework, .NET Core, 和 Xamarin(前身是Mono),UWP在今年稍后的时间会支持。全部这些实现得益于新增的API以及兼容模式,特别是.NET Core和UWP,他们之前只能使用一个受限的API集。
建议你将全部的业务逻辑和UI中依赖的代码转换成.NET Standard,能确保你的业务逻辑能够在任何平台被复用,好比桌面应用、移动应用、云应用。