.NET Standard 2.0 發(fā)布日期:2017年8月14日
公告原文地址
前言
早上起來.NET社區(qū)沸騰了邦尊,期待已久的.NET Core 2.0終于發(fā)布涝开!根據(jù)個人經(jīng)驗,微軟的產(chǎn)品一般在2.0時會趨于成熟,所以一個新的.Net開發(fā)時代已經(jīng)來臨后裸!未來屬于.NET Core。
對于.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集合扶檐,更是代碼實現(xiàn)標(biāo)準(zhǔn),所有.NET實現(xiàn)必須符合該標(biāo)準(zhǔn)胁艰,防止代碼碎片化款筑。.NET Standard被設(shè)計用來作為替代可移植類庫Portable Class Libraries(PCL)的構(gòu)建工具智蝠。
API支持:在.NET Standard 2.0中API支持?jǐn)?shù)量增多,包含API數(shù)量為32000個奈梳,.NET Standard 1.6 中API數(shù)量為13000個杈湾,目前為止已經(jīng)包含.NET Framework中的大部分APIs,這意味著可以輕松地將現(xiàn)有代碼移植到.NET Standard攘须,從而使現(xiàn)有代碼支持基于.NET Standard實現(xiàn)的任何平臺漆撞,參看平臺支持列表。
.NET Framework兼容模式:目前絕大多數(shù)的NuGet軟件包使用.NET Framework阻课,大多數(shù)項目被禁止引用到.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 (預(yù)計今年下半年)
.NET Standard 2.0 使用指南
創(chuàng)建.NET Standard類庫
通過創(chuàng)建一個新項目來實踐一下,在VS中 文件
| 新項目
選擇.NET Standard分類找到 Class Library (.NET Standard)旺上,項目名稱為mylibrary瓶蚂。
也可以通過命令行dotnet new
創(chuàng)建一個類庫(默認(rèn)使用.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類庫
1. 創(chuàng)建一個項目
方式一:vs工具
- 在使用類庫之前,需要創(chuàng)建一個項目征候。創(chuàng)建一個空ASP.NET Core項目杭攻。在VS中,創(chuàng)建項目時在.NET Core分類中選擇
ASP.NET Core Web Applica tion
疤坝,選中ASP.NET Core 2.0
兆解,類型為Empty。
方式二:命令行
- 命令行創(chuàng)建
dotnet new web -o aspnetcore
2. 引用Standard類庫
方式一:vs工具
使用.NET Standard類庫的方式和使用其他類庫一樣跑揉,只需要在項目中添加引用锅睛。在VS中右鍵項目,點擊添加/引用历谍,然后在項目(Projects)選項卡中選擇 mylibrary现拒。
方式二:命令行
命令行方式為項目添加引用
dotnet add reference ../mylibrary/mylibrary.csproj
3. 在Startup.cs文件夜畴,添加代碼
app.Run(async (context) =>
{
var message = mylibrary.Class1.GetMessage();
await context.Response.WriteAsync(message);
});
4. 運行
方式一:vs工具
在VS中F5運行嘹悼。
方式二:命令行
命令行工具運行
$ dotnet run
Now listening on: http://localhost:50878
Application started. Press Ctrl+C to shut down.
恭喜驼壶!創(chuàng)建的.NET Standard 2.0類庫在.NET Core中調(diào)用成功钧嘶。同樣也可以在 .NET Framework或Xamarin等不同類型的應(yīng)用中使用,方式一樣汁针。
重用現(xiàn)有.NET Framework類庫
方式一:vs工具添加Nuget包
.NET Standard 2.0 提供兼容模式透葛,現(xiàn)在添加一個非.NET Standard類型的NuGet包续镇,如要添加NuGet包為:Huitian.PowerCollections岂丘,在VS中右鍵項目mylibrary
陵究,選擇Manage NuGet Packages.,然后選擇Browse奥帘,搜索Huitian.PowerCollections铜邮,在結(jié)果中找到包并點擊安裝。
方式二:命令行添加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.
這段警告不僅在安裝包時提示松蒜,在每次構(gòu)建時都會提示。
警告出現(xiàn)的原因是因為NuGet無法確定.NET Framework類庫是否能夠完全正常工作已旧。例如秸苗,它可能依賴于Windows Forms(不跨平臺)。建議測試應(yīng)用程序运褪,如果所有功能都按預(yù)期工作惊楼,您可以阻止警告。
取消警告提醒
方式一:vs工具
再次編譯秸讹,不再提示警告信息檀咙。注意:配置只針對每個引用包,不是全局的璃诀。因此弧可,如果引用了另一個需要兼容模式的庫,將再次得到警告劣欢,需要對該包進(jìn)行單獨設(shè)置棕诵。
方式二:直接文件修改方式
編輯項目文件中包引用配置,添加NoWarn屬性:
<ItemGroup>
<PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>
上面的配置是將Huitian.PowerCollections(版本:1.0.0)包引用時產(chǎn)生的警告名為NU1701設(shè)置為不提示氧秘。
在VS中直接在包的屬性中進(jìn)行設(shè)置
發(fā)布NuGet包
方式一:vs工具
當(dāng)類庫開發(fā)完成年鸳,可以將其發(fā)布成NuGet包,在VS中丸相,右鍵項目選擇屬性(Properties)搔确,在選項卡中找到Package,選中Generate NuGet package on build
方式一:命令行
在命令行工具環(huán)境下灭忠,編輯項目文件添加GeneratePackageOnBuild設(shè)置值為true
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
編譯項目膳算,在輸出目錄中會找到生成的NuGet包。
補(bǔ)充:關(guān)于可移植類庫(Portable Class Libraries)
.NET Standard 2.0發(fā)布之后弛作,在.NET項目中共享代碼涕蜂,不再推薦使用PCL類庫,有可能后面會廢棄映琳,如果現(xiàn)在使用PCL應(yīng)該移植為.NET Standard類庫机隙。
總結(jié)
.NET Standard 2.0 支持API數(shù)量是 .NET Standard 1.x 的兩倍多蜘拉,這意味著我們將.NET Framework 中的代碼移植到.NET Standard變得更加順暢,另外通過兼容模式在.NET Standard類庫中可以引用.NET Framework項目或類庫有鹿,這樣允許在沒有將所有代碼移植到.NET Standard的情況下快速使用現(xiàn)有類庫旭旭。(提供一個過渡措施,如果代碼沒有執(zhí)行到不支持的API是不會出錯的葱跋。)
幾乎所有.NET平臺都支持 .NET Standard 2.0持寄,包括.NET Framework, .NET Core, 和 Xamarin(前身是Mono),UWP在今年稍后的時間會支持娱俺。所有這些實現(xiàn)得益于新增的API以及兼容模式稍味,特別是.NET Core和UWP,他們以前只能使用一個受限的API集荠卷。
建議你將所有的業(yè)務(wù)邏輯和UI中依賴的代碼轉(zhuǎn)換成.NET Standard模庐,能確保你的業(yè)務(wù)邏輯可以在任何平臺被復(fù)用,比如桌面應(yīng)用僵朗、移動應(yīng)用赖欣、云應(yīng)用。
更多參考資料
.NET Standard 2.0新增命名空間提供繪圖API啦验庙!
.NET Standard documentation
.NET Standard API