.Net Standard 多目標架構類別庫設計

1.實作.Net Standard 多目標架構

2.簡介 目標架構暱稱 (Target Framework Moniker)、前置處理器指示詞(Preprocessor directive)

3.封裝開發好的.NetStandard類別庫

1.實作.Net Standard 多目標架構

首先建立一個方案,底下加入三個專案

NetStandard20 是.NetStandard 2.0的類別庫,只支援.NetFramework 4.6 以上的版本

NET40ConsoleApp1 是.NetFramework 4.0的主控台專案

NET472ConsoleApp1 是.NetFramework 4.7.2的主控台專案

兩個主控台專案都加入NetStandard20的參考後分別建置,會發現NET40ConsoleApp1出現錯誤

解決方法

1.編輯NetStandard20的專案檔csproj

2.TargetFranework"s" 加上s

3.原本只有netstandard2.0,後面加上分號之後把net40;net45加入,在重新建置一次之後就成功了

編譯完成之後,可以看到,bin底下的Debug資料夾內,有三種不同的檔案

在編譯的時候他會分開各自編譯

 

2.簡介 目標架構暱稱 (Target Framework Moniker)、前置處理器指示詞(Preprocessor directive)

net40;net45 這個簡稱可以查微軟提供的 Target Framework Moniker (目標架構暱稱)裡面有對應的表格

可以查詢那些framework的簡稱是什麼

 

利用 Preprocessor directive  (前置處理器指示詞、以前稱為條件式編譯)來撰寫.NetStandard的類別庫

可以看到這些符號 NET40 就是上面TFM縮寫net40的大寫

假設我現在想要在.NetStandard裡面針對.netFramework 4.0 寫一段Code,我可以這樣寫

1. 使用 Preprocessor directives #if  + 上面那張表格查到的.netframework 4.0的縮寫 NET40

2.現在我要處理三種Target Framework 

3.在VS2017裡面,左上角就可以選擇Target Framework,

當我左上角選擇net40的時候

程式碼會藉由反灰來顯示會執行的區塊

程式在編譯的時候,會編譯3次,但是只有NET40的內容會被編譯到.NetFramework 4.0的dll裡面

剩下兩個都是編譯 return "OK";

3.封裝開發好的.NetStandard類別庫

使用指令 dotnet pack可執行封裝的動作

到指定的路徑底下可看到已經產生的NuGet壓縮檔

該壓縮檔可以直接解壓縮,如果有多目標架構的話,

在資料夾lib底下可看到針對不同TargerFramework所產生的dll