背景

很多情况下,我们编写了一些工具库之后,往往在某些框架版本中会出现一些问题,比如本人最近写的一个导入导出的工具库Magicodes.IE就出现了以下问题:

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

虽然支持标准库2.0,但是通过编写单元测试,确实发现如此:

因此,单元测试确实需要针对各个框架版本进行测试,并且相关代码需要针对框架进行兼容修改。那么如何实现呢?接下来我们一步步实践。

.NET框架版本说明

最新目标框架版本

下表定义了最常见的目标框架、如何引用这些框架,以及它们实现的 .NET Standard 版本。 这些目标框架版本是最新的稳定版本。 预览版不会显示。 目标框架名字对象 (TFM) 是一个标准化令牌格式,用于指定 .NET 应用或库的目标框架。

目标 Framework 最新 稳定版本 目标框架名字对象 (TFM) 已实现 .NET Standard 版本
.NET Standard 2.1 netstandard2.1 不可用
.NET Core 3.0 netcoreapp3.0 2.1
.NET Framework 4.8 net48 2.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 Framework NETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48
.NET Standard NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0, NETSTANDARD2_1
.NET Core NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0, NETCOREAPP3_1

Magicodes.IE之多框架版本测试

了解了这些知识,我们就可以编写多框架版本的实现和单元测试了。

单元测试添加多框架支持

  1. 修改TargetFramework为TargetFrameworks

  2. 设置分组

    根据目标框架分组:

  3. 修复编译错误

  4. 执行单元测试

    单元测试结果如下图所示:

    针对具体的单元测试,我们还可以指定目标框架进行运行和调试:

总结和经验分享

结合整改的过程,我们可以得出以下经验:

  • 单元测试编写时的异常消息判断尽量使用字符串包含判断,而不判断完整格式。

如上面所示,左侧代码在net461、netcoreapp2.2都是无法通过的,格式化的参数模板不一致。

  • 特定框架、平台代码需添加符号判断

如下面示例,默认情况下,.NET Core 不提供除代码页 28591 以外的其他任何代码页编码和 Unicode 编码,例如 UTF-8 和 UTF-16,所以我们可以使用以下代码进行添加,但是需要排除.NET Framework:

除了特定代码之外,有时还有特定依赖的包:

  • 在某些情况下不要使用过新的语法

比如以下代码:

转载是一种动力 分享是一种美德

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文档官网:docs.xin-lai.com

QQ群:

编程交流群<85318032>

产品交流群<897857351>

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

  1. Microsoft 解决方案框架版本 3.0 概述

    发布日期: 2004年06月04日 关于 Microsoft 解决方案框架的更多信息,请参阅 http://www.microsoft.com/china/technet/itsolutions/te ...

  2. Microsoft 解决方案框架版本 3.0 概述(MSF3.0)

    Microsoft 解决方案框架版本 3.0 概述 发布日期: 2004年06月04日 关于 Microsoft 解决方案框架的更多信息,请参阅 http://www.microsoft.com/ch ...

  3. 开源新手引导框架,支持TypeScript

    Shawn的GitChat新手引导框架已经有超过150人订阅,在此期间有不少伙伴给出了正面的评价,让我有了继续优化改进的动力. 其中一个问题是在微信小游戏中的报错问题,在文章一上线就暴露出来了,感谢「 ...

  4. 全志Tina Linux Camera 摄像头模块开发指南 全网最详细版本支持百问网T113-Pro DongshanPI-NezhaD1-H DongshanPI-D1s V853-Pro等开发板

    1 概述 编写目的:介绍camera 模块在sunxi 平台上的开发流程. 适用范围:本文档目前适用于tina3.0 以上具备camera 的硬件平台. 2 模块介绍 2.1 模块功能介绍 用于接收并 ...

  5. python装饰器-python装饰器是哪个版本支持的

    python装饰器是哪个版本支持的 **kwargs): print ' % (unction.__name__:@app.route(':import unctoolsde log(text=&am ...

  6. python程序框架的描述_简单介绍Python下自己编写web框架的一些要点

    在正式开始Web开发前,我们需要编写一个Web框架. 为什么不选择一个现成的Web框架而是自己从头开发呢?我们来考察一下现有的流行的Web框架: Django:一站式开发框架,但不利于定制化: web ...

  7. hbase的2.2.4版本支持哪个版本的hadoop_2019 年,Hadoop 还是数据处理的可选方案吗?...

    作者丨Christian Hollinger 译者丨方彦 目前云驱动数据处理和分析呈上升趋势,我们在本文中来分析下,Apache Hadoop 在 2019 年是否还是一个可选方案. 从我第一次使用 ...

  8. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快

    Ai-Bot 基于流行的 Node.js 和 JavaScript 语言 的一款新自动化框架,支持 Windows 和 Android 自动化. 1.Windows xpath 元素定位算法支持 支持 ...

  9. VS2022打开项目之后提示:找不到 .NETFramework,Version=v4.0 的引用程序集。要解决此问题,请为此框架版本安装开发人员工具包(SDK/目标包)或者重新定向应用程序。

    问题: 使用 vs2022打开带有.net4.0的项目会报错 严重性 代码 说明 项目 文件 行 列 禁止显示状态 错误 MSB3644 找不到 .NETFramework,Version=v4.0 ...

最新文章

  1. 施一公:大学必须不计成败、不论得失地为探索者提供宽容和支持的环境
  2. ios UI自动化测试
  3. python数据分析知识点_Python基础知识点总结:数据
  4. SpringBoot启动流程是怎样的
  5. (二)双线性插值python实现
  6. Spark 0.9的安装配置
  7. 面试:一文搞懂Java集合
  8. Comet服务器推送与SignalR
  9. 机器学习之降维方法(LDA、PCA)小结
  10. VB 超简单的屏幕截图代码
  11. springboot event线程池总结
  12. automak 和 autoconf 介绍
  13. jackson框架java反序列化漏洞_Jackson CVE-2019-12384: 反序列化漏洞复现
  14. Spring下载文件出现:UT010029: Stream is closed
  15. 【学习笔记】Python办公自动化 - Task 01 文件自动化处理 邮件自动发送
  16. 谷歌浏览器flash插件离线下载,最新版
  17. 手机远程计算机桌面,远程桌面预览Windows10,您可以远程通过手机控制电脑
  18. Vue学习----第三天_webpack(学习webpack看这一篇就够了1.8w字)【6.7】
  19. 李开复给大学生的第6封信:选择的智慧
  20. 图像识别的核心思想是什么!

热门文章

  1. Sharepoint在itemUpdating中获取修改后的用户或用户组栏的值
  2. C#——一个简单的文件管理器
  3. 如何将Outgoing Webhook部署到中国版Azure
  4. 本地服务器下的局域网安全吗_本地安全认证服务器
  5. 唤醒计算机运行此任务_如何停止Windows 8唤醒计算机以运行维护
  6. redhat9Linux解压gz,linux (redhat9)下subversion 的安装
  7. php rewrite url_PHP实现url重写和.htaccess
  8. springboot配置允许跨域访问
  9. 洛谷P4364 [九省联考2018]IIIDX(线段树)
  10. linux ubuntu deepin apache2 rewrite