.NET Standard 2.0 特性介绍和使用指南
前言
早上起來.NET社區(qū)沸騰了,期待已久的.NET Core 2.0終于發(fā)布!根據(jù)個(gè)人經(jīng)驗(yàn),微軟的產(chǎn)品一般在2.0時(shí)會(huì)趨于成熟,所以一個(gè)新的.Net開發(fā)時(shí)代已經(jīng)來臨!未來屬于.NET Core。
對(duì)于.NET Core 2.0的發(fā)布介紹,圍繞2.0的開發(fā)生態(tài),我想通過四篇文章(名稱暫定):
.NET Standard 2.0 特性介紹和使用指南
.NET Core 2.0 特性介紹和使用指南
ASP.NET Core 2.0 特性介紹和使用指南
Entity Framework Core 2.0 特性介紹和使用指南
.NET Standard 2.0是基石,所以放在第一篇。
使用之前,下載安裝.NET Core 2.0,下載地址。
.NET Standard 2.0 特性介紹
代碼共享:.NET Standard是API集合,更是代碼實(shí)現(xiàn)標(biāo)準(zhǔn),所有.NET實(shí)現(xiàn)必須符合該標(biāo)準(zhǔn),防止代碼碎片化。.NET Standard被設(shè)計(jì)用來作為替代可移植類庫(kù)Portable Class Libraries(PCL)的構(gòu)建工具。
API支持:在.NET Standard 2.0中API支持?jǐn)?shù)量增多,包含API數(shù)量為32000個(gè),.NET Standard 1.6 中API數(shù)量為13000個(gè),目前為止已經(jīng)包含.NET Framework中的大部分APIs,這意味著可以輕松地將現(xiàn)有代碼移植到.NET Standard,從而使現(xiàn)有代碼支持基于.NET Standard實(shí)現(xiàn)的任何平臺(tái),參看平臺(tái)支持列表。
.NET Framework兼容模式:目前絕大多數(shù)的NuGet軟件包使用.NET Framework,大多數(shù)項(xiàng)目被禁止引用到.NET Standard項(xiàng)目,因不是所有的項(xiàng)目依賴都支持.NET Standard,這是在.NET Standard 2.0中加入兼容模式的原因,使.NET Standard項(xiàng)目可以直接引用.NET Framework類庫(kù)。目前70%的Nuget軟件包是兼容.NET Standard 2.0,可能在某些特殊情況下不起會(huì)兼容失敗,比如:WPF中的.NET Framework類庫(kù)。
平臺(tái)支持
.NET Framework 4.6.1
.NET Core 2.0
Mono 5.4
Xamarin.iOS 10.14
Xamarin.Mac 3.8
Xamarin.Android 7.5
Upcoming version of UWP (預(yù)計(jì)今年下半年)
.NET Standard 2.0 使用指南
創(chuàng)建.NET Standard類庫(kù)
通過創(chuàng)建一個(gè)新項(xiàng)目來實(shí)踐一下,在VS中?文件?|?新項(xiàng)目?選擇.NET Standard分類找到 Class Library (.NET Standard),項(xiàng)目名稱為mylibrary。
也可以通過命令行dotnet new創(chuàng)建一個(gè)類庫(kù)(默認(rèn)使用.NET Standard)
dotnet new lib -o mylibrary為了讓這個(gè)類庫(kù)更加意義,編輯文件Class1.cs as,添加一行邏輯代碼。
using System;namespace mylibrary{ ??public class Class1{ ? ?
? ? ?public static string GetMessage() => "Hello from .NET Standard!";} }
使用.NET Standard類庫(kù)
在使用類庫(kù)之前,需要?jiǎng)?chuàng)建一個(gè)項(xiàng)目。創(chuàng)建一個(gè)空ASP.NET Core項(xiàng)目。在VS中,創(chuàng)建項(xiàng)目時(shí)在.NET Core分類中選擇ASP.NET Core Web Application,選中ASP.NET Core 2.0,類型為Empty。
命令行創(chuàng)建
dotnet new web -o aspnetcore使用.NET Standard類庫(kù)的方式和使用其他類庫(kù)一樣,只需要在項(xiàng)目中添加引用。在VS中右鍵項(xiàng)目,點(diǎn)擊添加/引用,然后在項(xiàng)目(Projects)選項(xiàng)卡中選擇 mylibrary。
命令行方式為項(xiàng)目添加引用
dotnet add reference ..mylibrary.csproj在Startup.cs文件,添加代碼
app.Run(async (context) => { ? ?var message = mylibrary.Class1.GetMessage(); ? ?await context.Response.WriteAsync(message); });在VS中F5運(yùn)行。
命令行工具運(yùn)行
$ dotnet run Now listening on: http://localhost:50878Application started. Press Ctrl+C to shut down.運(yùn)行效果
恭喜!創(chuàng)建的.NET Standard 2.0類庫(kù)在.NET Core中調(diào)用成功。同樣也可以在 .NET Framework或Xamarin等不同類型的應(yīng)用中使用,方式一樣。
重用現(xiàn)有.NET Framework類庫(kù)
.NET Standard 2.0 提供兼容模式,現(xiàn)在添加一個(gè)非.NET Standard類型的NuGet包,如要添加NuGet包為:Huitian.PowerCollections,在VS中右鍵項(xiàng)目mylibrary,選擇Manage NuGet Packages.,然后選擇Browse,搜索Huitian.PowerCollections,在結(jié)果中找到包并點(diǎn)擊安裝。
命令行添加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.這段警告不僅在安裝包時(shí)提示,在每次構(gòu)建時(shí)都會(huì)提示。
警告出現(xiàn)的原因是因?yàn)镹uGet無(wú)法確定.NET Framework類庫(kù)是否能夠完全正常工作。例如,它可能依賴于Windows Forms(不跨平臺(tái))。建議測(cè)試應(yīng)用程序,如果所有功能都按預(yù)期工作,您可以阻止警告。
編輯項(xiàng)目文件中包引用配置,添加NoWarn屬性:
<ItemGroup> ? ?<PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" /></ItemGroup>上面的配置是將Huitian.PowerCollections(版本:1.0.0)包引用時(shí)產(chǎn)生的警告名為NU1701設(shè)置為不提示。
在VS中直接在包的屬性中進(jìn)行設(shè)置
再次編譯,不再提示警告信息。注意:配置只針對(duì)每個(gè)引用包,不是全局的。因此,如果引用了另一個(gè)需要兼容模式的庫(kù),將再次得到警告,需要對(duì)該包進(jìn)行單獨(dú)設(shè)置。
發(fā)布NuGet包
當(dāng)類庫(kù)開發(fā)完成,可以將其發(fā)布成NuGet包,在VS中,右鍵項(xiàng)目選擇屬性(Properties),在選項(xiàng)卡中找到Package,選中Generate NuGet package on build
在命令行工具環(huán)境下,編輯項(xiàng)目文件添加GeneratePackageOnBuild設(shè)置值為true
<PropertyGroup><TargetFramework>netstandard2.0</TargetFramework><GeneratePackageOnBuild>true</GeneratePackageOnBuild></PropertyGroup>編譯項(xiàng)目,在輸出目錄中會(huì)找到生成的NuGet包。
補(bǔ)充:關(guān)于可移植類庫(kù)(Portable Class Libraries)
.NET Standard 2.0發(fā)布之后,在.NET項(xiàng)目中共享代碼,不再推薦使用PCL類庫(kù),有可能后面會(huì)廢棄,如果現(xiàn)在使用PCL應(yīng)該移植為.NET Standard類庫(kù)。
總結(jié)
.NET Standard 2.0 支持API數(shù)量是 .NET Standard 1.x 的兩倍多,這意味著我們將.NET Framework 中的代碼移植到.NET Standard變得更加順暢,另外通過兼容模式在.NET Standard類庫(kù)中可以引用.NET Framework項(xiàng)目或類庫(kù),這樣允許在沒有將所有代碼移植到.NET Standard的情況下快速使用現(xiàn)有類庫(kù)。(提供一個(gè)過渡措施,如果代碼沒有執(zhí)行到不支持的API是不會(huì)出錯(cuò)的。)
幾乎所有.NET平臺(tái)都支持 .NET Standard 2.0,包括.NET Framework, .NET Core, 和 Xamarin(前身是Mono),UWP在今年稍后的時(shí)間會(huì)支持。所有這些實(shí)現(xiàn)得益于新增的API以及兼容模式,特別是.NET Core和UWP,他們以前只能使用一個(gè)受限的API集。
建議你將所有的業(yè)務(wù)邏輯和UI中依賴的代碼轉(zhuǎn)換成.NET Standard,能確保你的業(yè)務(wù)邏輯可以在任何平臺(tái)被復(fù)用,比如桌面應(yīng)用、移動(dòng)應(yīng)用、云應(yīng)用。
更多參考資料
.NET Standard 2.0新增命名空間
提供繪圖API啦!.NET Standard documentation
.NET Standard API
原文地址:http://www.cnblogs.com/YGYH/p/7364647.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的.NET Standard 2.0 特性介绍和使用指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 2.0 正式发布信息
- 下一篇: .NET Core 2.0使用NLog