.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,能確保你的業務邏輯能夠在任何平臺被複用,好比桌面應用、移動應用、雲應用。