.Net Framework到.Net6的移植参考
来源: | 作者:JYTEK | 发布时间: 2023-04-28 | 1209 次浏览 | 分享到:

关键词:.net framework、.net6、移植


声明

本文描述移植.net framework项目到.net6的流程以及注意事项。


1.工具环境

开发环境:Visual Studio 2022
辅助工具:


2..NET Upgrade Assistant的安装

在PowerShell中执行以下命令进行安装:

     dotnet tool install -g upgrade-assistant


注意:

    如果已配置其他 NuGet 源,则安装此工具可能会失败。

    使用--ignore-failed-sources参数将这些失败处理为警告而不是错误:

        dotnet tool install -g --ignore-failed-sources upgrade-assistant


3.移植过程

移植前说明

.NET 6是可以直接引用.NET Framework的库的,前提是.NET Framework的库中没有.NET 6不支持的API调用,如果有,这需要完整的进行以下流程的移植。具体哪些API不支持,可参考本文章节“四”。

这里以JYUSB62405驱动为例,演示使用.NET Upgrade Assistant工具将其移植到.net 6的过程。其他类型的项目,操作流程大同小异,按照提示操作即可。

使用upgrade-assistant命令开始移植

在项目的目录中打开PowerShell,执行一下命令:

upgrade-assistant upgrade .JYUSB62405.csproj

upgrade-assistant会列出每一步操作的若干个选项,一般默认选1,根据需要进行选择即可,如下图,第一步执行后就选择是否备份工程:

图 1  执行第1步命令


输入选择数字后回车继续操作,会列出输入备份目录,选1默认即可。然后是选择1,执行“Convert project file to SDK style”,如下图:


执行完成后,会提示是否添加package“Microsoft.DotNet.UpgradeAssistant. Extensions.Default.Analyzers”,这个package是用于分析移植后的代码与新的.net SDK的兼容性,建议加上。后续都建议选择1,知道如下界面,说明移植完成:


这里选5,退出工具。


修改工程文件

打开.csproj文件,修改TargetFramework为“net6.0”,upgrade-assistant工具执行完成默认是“netstandard2.0”,如下图:



修改不兼容的代码

Visual Studio打开项目之后,会在错误提示中给出警告提示,例如Thread.Abort方法,在.net 6中已经弃用了,并且调用还会抛出PlatformNotSupportedException的异常:



编译和测试

将有PlatformNotSupportedException异常的警告都修改后,基本上代码就可以编译生成了。对于测试,如果之前使用了C#默认的单元测试框架,在.net 6中已经不支持这个框架了,建议使用NUnit单元测试框架。仍然将单元测试的项目使用upgrade-assistant工具进行迁移,完成后,给工程安装NUnit单元测试框架和TestAdapter,如下图:

然后,将单元测试的代码中的“[TestClass]”替换为“[TestFixture]”,“[TestMethod]”替换为“[TestCase]”,“[TestInitialize]”替换为“[SetUp]”,“[TestCleanup]”替换为“Teardown”。其他的PlatformNotSupportedException相关的异常也需要修改。


4.在 .NET 6+ 上引发异常的 API

.NET Framework有一些API在.NET 6中已经不再支持,使用会引发异常,微软列出了会引发异常的API,见微软官网的页面:https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/unsupported-apis