.NET Standard 2.0 特性介绍和使用指南
前言
早上起來.NET社區沸騰了,期待已久的.NET Core 2.0終于發布!根據個人經驗,微軟的產品一般在2.0時會趨于成熟,所以一個新的.Net開發時代已經來臨!未來屬于.NET Core。
對于.NET Core 2.0的發布介紹,圍繞2.0的開發生態,我想通過四篇文章(名稱暫定):
.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集合,更是代碼實現標準,所有.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實現的任何平臺,參看平臺支持列表。
.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類庫。
平臺支持
.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 (預計今年下半年)
.NET Standard 2.0 使用指南
創建.NET Standard類庫
通過創建一個新項目來實踐一下,在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!";} }
使用.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.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:50878Application started. Press Ctrl+C to shut down.運行效果
恭喜!創建的.NET Standard 2.0類庫在.NET Core中調用成功。同樣也可以在 .NET Framework或Xamarin等不同類型的應用中使用,方式一樣。
重用現有.NET Framework類庫
.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包
當類庫開發完成,可以將其發布成NuGet包,在VS中,右鍵項目選擇屬性(Properties),在選項卡中找到Package,選中Generate NuGet package on build
在命令行工具環境下,編輯項目文件添加GeneratePackageOnBuild設置值為true
<PropertyGroup><TargetFramework>netstandard2.0</TargetFramework><GeneratePackageOnBuild>true</GeneratePackageOnBuild></PropertyGroup>編譯項目,在輸出目錄中會找到生成的NuGet包。
補充:關于可移植類庫(Portable Class Libraries)
.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,能確保你的業務邏輯可以在任何平臺被復用,比如桌面應用、移動應用、云應用。
更多參考資料
.NET Standard 2.0新增命名空間
提供繪圖API啦!.NET Standard documentation
.NET Standard API
原文地址:http://www.cnblogs.com/YGYH/p/7364647.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的.NET Standard 2.0 特性介绍和使用指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 2.0 正式发布信息
- 下一篇: 体验 PHP under .NET Co