.NET Standard 2.0介紹

  • 5320
  • 0
  • 2017-07-25

什麼是.NET Standard?是套件?需要安裝?都不是~

隨著Xamarin與.NET Core 的浪潮來襲,.NET已儼然成為平台之姿提供豐富的開發環境開發各式各樣的應用

同時也產生不同應用間不盡相同的BCL實作,導致某些code,甚至整個library無法被reuse,需要針對特定平台重新撰寫該功能

.NET Standard的出現正是為了消彌這些亂象而衍生的開發困難,被視為是新一代PCL (Portable Class Library) 

透過制定一系列.NET API的正式規範提供所有平台的.NET runtime實作,是一份協議、一系列API介面(Interface),並不是直接實作。

核心概念:如果Library是基於.NET Standard x.y版本實作,便可於所有符合x.y版本的.NET 應用上使用※圖中橫向代表.NET Standard目前制定的版本,縱向對應各平台符合規範的實作版本,且.NET Standard在各版本間具有向上兼容(Upward Compatible)的特性。

例如寫一個.NET Standard 1.1的library,就可運行在UWP 10.0、Windows 8.0、.NET Framework 4.5....等等 ,但不包括WP Silverlight,

並且因為向上兼容特,符合1.1以後版本(如1.2...2.0)的平台都可以使用此Library,因此也可運行在.NET Core 2.0。

.NET Standard VS PCL (Portable Class Library)

兩者都是為了能夠使用同樣的API共享biniary code。 

差異點

  • PCL 是Microsoft平台only
  • PCL是奇異的編號配置檔,STD是線性版本號
  • .NET Standard是被精心策畫的(官方說),PCL只是找出現存平台的交集區

 

.NET Standard 2.0 改變

  • 擁有更廣泛的API - 取自 Xamarin 與 .NET Framework 的交集,.NET Core 2.0實作

  • 可以直接參考.NET Framwork的dll,包含Nuget packages

.NET Standard 工作原理

引用NuGet package NetStandard.Library x.y,如上圖

編譯期間

檢查程式中是否有可以先橋接至對應的.NET Framwork 或 PCL 組件進行型別轉送(Type Forwarding)

執行期間

Runtime提供實作使netstandard.dll能正確運行型別轉送(Type Forwarding)執行程式

建立.NET Standard 2.0 Library

需求環境:

  1. 安裝VS 2017 v15.3 以上版本
  2. 安裝.NET Core 2.0

※NQuery是一個net2.0的library

提供Muti-Target Framworks builds

  1. 直接編輯.csproj
  2. 修改TargetFramworks
  3. build!!!

.NET Standard相容性檢查工具-.NET Portability Analyzer

提供檢查dll或者專案的程式碼與.NET Standard x.y(or .NET framwork x.y......etc)相容性,輸出分析結果文件(JSON,HTML,Excel)

可以直接使用console指令分析某個資料夾下所有dll或是某個dll

ApiPort.exe analyze -f C:\git\Application\bin\Debug -b

也可以透過安裝Visual studio擴充套件,重新啟動後點選專案右鍵,就可以看到Analyzer Setting設定目標Framwork&Version還有輸出文件格式,Analyze Project 執行分析

分析結果的文件,提供涵蓋率、差異API與建議處理

※2017/7/7專案引用的外部參考dll or package目前似乎不包含在分析範圍內,會產生一張表Missing assemblies告知有哪些外部參考(有些奇怪)

 

 

參考&來源資料:

再來多聊一點 .Net Standard

https://docs.microsoft.com/zh-tw/dotnet/standard/net-standard

https://github.com/dotnet/standard/blob/master/docs/netstandard-20/README.md

https://www.slideshare.net/terrajobst/net-standard-under-the-hood

https://weblog.west-wind.com/posts/2016/Nov/23/NET-Standard-20-Making-Sense-of-NET-Again

https://www.youtube.com/playlist?list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY