.Net Core 2.0 生態(1).NET Standard 2.0 特性介紹和使用指南

.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

  1. .Net Core 2.0 生態(1).NET Standard 2.0 特性介紹和使用指南(已發佈)
  2. .Net Core 2.0 生態(2).NET Core 2.0 特性介紹和使用指南(已發佈)
  3. .Net Core 2.0 生態(3)ASP.NET Core 2.0 特性介紹和使用指南(已發佈)
  4. .Net Core 2.0 生態(4)Entity Framework Core 2.0 特性介紹和使用指南(已發佈)

.NET Standard 2.0是基石,因此放在第一篇。web

使用以前,下載安裝.NET Core 2.0,下載地址api

.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實現的任何平臺,參看平臺支持列表。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

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

更多參考資料

相關文章
相關標籤/搜索