已安装.NET 5 SDK 如何运行.NET Core 3.1的测试项目
出现该问题的核心原因是.NET 5 SDK本身支持向下构建低版本.NET Core项目,所以控制台应用可以正常编译;但测试运行时默认会严格匹配测试项目指定的框架版本,因此会找不到3.1运行时报错。
可执行解决方案
方案1:配置运行时前滚策略(最简便,无需修改原有发布逻辑)
让.NET 5运行时兼容执行.NET Core 3.1的测试程序,操作方式三选一即可:
- 修改测试项目的
.csproj文件,在PropertyGroup节点下添加如下配置,修改后重新构建再运行测试:
<RollForward>Major</RollForward>
- 命令行执行测试时追加参数:
dotnet test --roll-forward Major
- 若使用VS Code测试插件运行,修改
.vscode/settings.json添加如下配置,重启VS Code生效:
"dotnet-test.explorerOptions": ["--roll-forward", "Major"]
方案2:配置手动安装的.NET Core 3.1二进制的识别路径
你之前手动安装的.NET Core 3.1未被识别是因为没有配置对应的用户级环境变量,该操作不需要管理员权限:
- 找到你手动解压.NET Core 3.1的目录,例如
C:\Users\你的用户名\dotnet31 - 新增当前用户的环境变量
DOTNET_ROOT,值为你的.NET 5 SDK安装路径 - 新增当前用户的环境变量
DOTNET_ADDITIONAL_DEPS,值为.NET Core 3.1解压目录下的shared文件夹路径 - 将.NET Core 3.1的解压目录路径添加到当前用户的
PATH环境变量的最顶部
配置完成后重启VS Code即可识别到手动安装的3.1运行时。
方案3:测试项目多目标框架适配
如果前两种方案不符合你的使用场景,可以修改测试项目的.csproj文件,将单目标框架配置改为多目标:
<!-- 把原来的<TargetFramework>netcoreapp3.1</TargetFramework>替换为下面的配置 --> <TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
修改后构建项目会同时生成两个版本的输出,运行测试时会自动选择适配当前环境的net5.0版本执行,不会影响原有面向3.1的发布逻辑。
内容的提问来源于stack exchange,提问作者bngara
相关产品推荐
相关产品推荐

