1.實作.Net Standard 多目標架構
2.簡介 目標架構暱稱 (Target Framework Moniker)、前置處理器指示詞(Preprocessor directive)
3.封裝開發好的.NetStandard類別庫
首先建立一個方案,底下加入三個專案
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資料夾內,有三種不同的檔案
在編譯的時候他會分開各自編譯
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";
使用指令 dotnet pack可執行封裝的動作
到指定的路徑底下可看到已經產生的NuGet壓縮檔
該壓縮檔可以直接解壓縮,如果有多目標架構的話,
在資料夾lib底下可看到針對不同TargerFramework所產生的dll