在前一篇博客《.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中自動給出了錯誤提示信息
此時就可以使用條件編譯符號來解決此問題