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


.NET Standard 2.0 發布日期:2017年8月14日
公告原文地址

前言

早上起來.NET社區沸騰了,期待已久的.NET Core 2.0終於發布!根據個人經驗,微軟的產品一般在2.0時會趨於成熟,所以一個新的.Net開發時代已經來臨!未來屬於.NET Core。

對於.NET Core 2.0的發布介紹,圍繞2.0的架構體系,本系列相關文章:

  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是基石,所以放在第一篇。

使用之前,下載安裝.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/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,能確保你的業務邏輯可以在任何平台被復用,比如桌面應用、移動應用、雲應用。

更多參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM