在前一篇部落格《.NET Standard中配置TargetFrameworks輸出多版本類庫》中詳細介紹瞭如何建立、配置、條件編譯、引用本地程式集、NuGet方式引用程式集、XML文件輸出、編碼與DEBUG 除錯、自動生成內部版本號、檔案複製等功能。但是Visual Studio中也存在一些使用不方便的地方,本文介紹一些開發中的小技巧。
高版本的 Visual Studio 足夠智慧,能針對不同的API及時給出提示,指出API適用於哪種版本的.NET。比如下圖中使用的 fileStream.WriteAsync()方法是非同步方法,只在.NET4.5及.NET Standard2.0中受支援,在.NET4.0中沒有非同步方法,只有對應的 fileStream.Write()同步方法。
將程式碼修改為如下格式即可實現多版本
所以在編寫程式碼時,建議在專案檔案.csproj檔案中做如下配置:
<PropertyGroup> <TargetFrameworks>netstandard2.0;net45;net40</TargetFrameworks> </PropertyGroup>
也就是將 netstandard2.0 放置在第一個位置,因為在VS中編寫程式碼時當前編輯器環境是針對放置在第一個位置的.NET版本。
.NET Standard 類庫配置多目標框架後,新增引用時無法自動切換版本,必須手動調整配置順序才可以。
<PropertyGroup> <TargetFrameworks>net40;net45;netstandard2.0;</TargetFrameworks> <!--輸出多版本類庫--> </PropertyGroup>
但是在編碼時提供了目標框架切換的功能,這個是非常實用且方便的功能。我做的BIMFACE二次開發的介面的目標是支援 .NET Framework4.0、.NET Framework4.5 以及 .NET Core版本。將滑鼠放到程式碼編輯器介面左上角,自動給出提示“實用下拉選單可檢視和切換到此檔案所屬的其他專案”
下拉框的選項內容是 <TargetFrameworks> 中配置的值
此功能可以判斷相同的程式碼在哪些框架下受支援且能正確編譯。比如我再LogUtils類中寫了一個非同步記錄日誌的方法,當切換到 .NET Standard 2.0 或者 .NET 4.5時編輯器沒有給出錯誤的提示,說明程式碼在這兩種框架下是受支援的。
當切換到 .NET4.0 時,VS中自動給出了錯誤提示資訊
此時就可以使用條件編譯符號來解決此問題