日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Magicodes.IE编写多框架版本支持和执行单元测试

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Magicodes.IE编写多框架版本支持和执行单元测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

很多情況下,我們編寫了一些工具庫之后,往往在某些框架版本中會出現一些問題,比如本人最近寫的一個導入導出的工具庫Magicodes.IE就出現了以下問題:

(GitHub:https://github.com/xin-lai/Magicodes.IE)

雖然支持標準庫2.0,但是通過編寫單元測試,確實發現如此:

因此,單元測試確實需要針對各個框架版本進行測試,并且相關代碼需要針對框架進行兼容修改。那么如何實現呢?接下來我們一步步實踐。

.NET框架版本說明


最新目標框架版本

下表定義了最常見的目標框架、如何引用這些框架,以及它們實現的 .NET Standard 版本。 這些目標框架版本是最新的穩定版本。 預覽版不會顯示。 目標框架名字對象 (TFM) 是一個標準化令牌格式,用于指定 .NET 應用或庫的目標框架。

目標 Framework最新 穩定版本目標框架名字對象 (TFM)已實現 .NET Standard 版本
.NET Standard2.1netstandard2.1不可用
.NET Core3.0netcoreapp3.02.1
.NET Framework4.8net482.0

支持的目標框架版本

目標框架通常由 TFM 引用。 下表顯示 .NET Core SDK 和 NuGet 客戶端支持的目標框架。 等效項顯示在括號內。 例如,win81 對于 netcore451 來說等效于 TFM。

如何讓工程支持多個框架?

以單元測試工程為例:

<PropertyGroup><TargetFrameworks>netcoreapp3.0;netcoreapp2.2;netcoreapp3.1;net461</TargetFrameworks><IsPackable>false</IsPackable></PropertyGroup> 如上述代碼所示,我們可以通過“TargetFrameworks”元素來定義多個框架。那么如何在工程里面添加條件判斷以進行編譯呢?<ItemGroup Condition=" '$(TargetFramework)' == 'net461' "><PackageReference Include="Newtonsoft.Json" Version="12.0.3" /></ItemGroup> 除了工程里面,我們代碼中如何針對不同的框架版本編寫代碼呢? #if NET461return excelPackage.Workbook.Worksheets[typeof(T).GetDisplayName()] ??excelPackage.Workbook.Worksheets[ExcelImporterSettings.SheetName] ??excelPackage.Workbook.Worksheets[1]; #elsereturn excelPackage.Workbook.Worksheets[typeof(T).GetDisplayName()] ??excelPackage.Workbook.Worksheets[ExcelImporterSettings.SheetName] ??excelPackage.Workbook.Worksheets[0]; #endif

這些“NET461”的符號都有哪些呢?如下所示:

完整的 .NET Core 目標框架的預處理器符號列表

目標框架符號
.NET FrameworkNETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48
.NET StandardNETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0, NETSTANDARD2_1
.NET CoreNETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0, NETCOREAPP3_1

Magicodes.IE之多框架版本測試

了解了這些知識,我們就可以編寫多框架版本的實現和單元測試了。

單元測試添加多框架支持

  • 修改TargetFramework為TargetFrameworks

  • 設置分組

    根據目標框架分組:

  • 修復編譯錯誤

  • 執行單元測試

    單元測試結果如下圖所示:

    針對具體的單元測試,我們還可以指定目標框架進行運行和調試:

  • 總結和經驗分享

    結合整改的過程,我們可以得出以下經驗:

    • 單元測試編寫時的異常消息判斷盡量使用字符串包含判斷,而不判斷完整格式。

    如上面所示,左側代碼在net461、netcoreapp2.2都是無法通過的,格式化的參數模板不一致。

    • 特定框架、平臺代碼需添加符號判斷

    如下面示例,默認情況下,.NET Core 不提供除代碼頁 28591 以外的其他任何代碼頁編碼和 Unicode 編碼,例如 UTF-8 和 UTF-16,所以我們可以使用以下代碼進行添加,但是需要排除.NET Framework:

    除了特定代碼之外,有時還有特定依賴的包:

    • 在某些情況下不要使用過新的語法

    比如以下代碼:

    轉載是一種動力 分享是一種美德

    如果喜歡作者的文章,請關注【麥扣聊技術】訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊信息科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

    文檔官網:docs.xin-lai.com

    QQ群:

    編程交流群<85318032>?

    產品交流群<897857351>

    總結

    以上是生活随笔為你收集整理的Magicodes.IE编写多框架版本支持和执行单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。