关键词:.net framework、.net6、移植
声明
本文描述移植.net framework项目到.net6的流程以及注意事项。
1.工具环境
开发环境:Visual Studio 2022
辅助工具:
.NET Upgrade Assistant用于将.net framework的项目移植到.net core的辅助工具,是一个命令行的程序,官方链接:https://dotnet.microsoft.com/en-us/platform/upgrade-assistant
Microsoft SARIF Viewer 2022用于方便查看.NET Upgrade Assistant分析的报告
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
Copyright © 2016-2025 JYTEK All Rights Reserved.