BenchmarkDotNet运行性能测试报MSB3971引用程序集错误如何解决
问题原因
MSB3971报错的触发原因是BenchmarkDotNet默认执行测试时会自动生成多目标框架的测试宿主程序,你的环境配置中存在SDK识别错误,将.NET 6.0错误识别为传统.NET Framework框架(传统.NET Framework最高版本仅为4.8,不存在v6.0版本)。
解决方案
按以下步骤依次排查即可:
- 步骤1:检查项目根目录是否存在
global.json文件
若存在该文件,确认其中指定的SDK版本与你本地安装的.NET 6.0 SDK版本匹配,或直接删除该文件让系统自动选择最新匹配的SDK。正确的配置示例:{ "sdk": { "version": "6.0.417", "rollForward": "latestMinor" } } - 步骤2:修改BenchmarkDotNet启动配置,指定仅适配当前.NET 6.0运行时
替换原来的启动代码,显式指定运行时,禁止自动多框架适配:using BenchmarkDotNet.Configs; using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Running; var config = DefaultConfig.Instance .AddJob(Job.Default.WithRuntime(CoreRuntime.Core60)); BenchmarkRunner.Run<SortingAlgorithmBenchmark>(config); public class SortingAlgorithmBenchmark { [Benchmark] public void BubbleSort() { SortingAlgorithms.BubbleSort(new[] {2,3,1}); } } - 步骤3:验证项目配置文件正确性
右键项目选择「编辑项目文件」,确认根节点下的目标框架配置正确,没有错误指定为传统.NET Framework:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <!-- 你的包引用等其他配置 --> </Project> - 步骤4:清理项目缓存并使用Release模式运行
- 关闭VS,删除项目根目录下的
bin、obj文件夹 - 重新打开项目,将运行模式切换为Release
- 点击运行,或在项目根目录打开终端执行命令
dotnet run -c Release
- 关闭VS,删除项目根目录下的
内容的提问来源于stack exchange,提问作者VR46_Italia
相关产品推荐
相关产品推荐

