.NET Standard 2.0 特性介紹和使用指南(轉(zhuǎn)發(fā))

.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瓶蚂。

創(chuàng)建.NET Standard類庫

也可以通過命令行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工具

在VS中直接在包的屬性中進(jìn)行設(shè)置

再次編譯秸讹,不再提示警告信息檀咙。注意:配置只針對每個引用包,不是全局的璃诀。因此弧可,如果引用了另一個需要兼容模式的庫,將再次得到警告劣欢,需要對該包進(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

發(fā)布NuGet

方式一:命令行

在命令行工具環(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

原文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顶吮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子粪薛,更是在濱河造成了極大的恐慌悴了,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件违寿,死亡現(xiàn)場離奇詭異湃交,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)藤巢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門搞莺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掂咒,你說我怎么就攤上這事才沧。” “怎么了绍刮?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵温圆,是天一觀的道長。 經(jīng)常有香客問我孩革,道長岁歉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任膝蜈,我火速辦了婚禮锅移,結(jié)果婚禮上熔掺,老公的妹妹穿的比我還像新娘。我一直安慰自己非剃,他們只是感情好瞬女,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著努潘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坤学。 梳的紋絲不亂的頭發(fā)上疯坤,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音深浮,去河邊找鬼压怠。 笑死,一個胖子當(dāng)著我的面吹牛飞苇,可吹牛的內(nèi)容都是我干的菌瘫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼布卡,長吁一口氣:“原來是場噩夢啊……” “哼雨让!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忿等,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤栖忠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贸街,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庵寞,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年薛匪,在試婚紗的時候發(fā)現(xiàn)自己被綠了捐川。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逸尖,死狀恐怖古沥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冷溶,我是刑警寧澤渐白,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站逞频,受9級特大地震影響纯衍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苗胀,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一襟诸、第九天 我趴在偏房一處隱蔽的房頂上張望瓦堵。 院中可真熱鬧,春花似錦歌亲、人聲如沸菇用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惋鸥。三九已至,卻和暖如春悍缠,著一層夾襖步出監(jiān)牢的瞬間卦绣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工飞蚓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留滤港,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓趴拧,卻偏偏與公主長得像溅漾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子著榴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容