我有一个针对netcoreapp2和net462的小型基准测试项目。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp2;net462</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.11.5" />
</ItemGroup>
</Project>
但是,在运行此基准测试时,它似乎只尊重netcoreapp目标,而不是完整的框架目标。它指出 CLR 作业是针对 net472 运行的。我可能做错了还是这是一个问题?我只针对两个工作[CoreJob,ClrJob]。
[主机] : .NET Core 2.0.9 (CoreCLR 4.6.26614.01, CoreFX 4.6.26614.01(, 64bit RyuJIT Clr : .NET Framework 4.7.2 (CLR 4.0.30319.42000(, 64bit RyuJIT-v4.7.3394.0 核心 : .NET Core 2.0.9 (CoreCLR 4.6.26614.01, CoreFX 4.6.26614.01(, 64 位 RyuJIT
我还注意到,即使我删除了显式作业属性并仅将我的项目定位到 net462,运行摘要仍然显示它使用 net472 执行。
如 BenchmarkDotNet 文档中所述:https://benchmarkdotnet.org/articles/configs/toolchains.html#multiple-frameworks-support
完整的 .NET Framework 始终使用给定计算机上可用的最新 .NET Framework 运行每个 .NET 可执行文件。如果您尝试为几个.NET TFM运行基准测试,它们都将使用计算机上最新的.NET Framework执行。唯一的区别是,它们都将根据编译的目标版本启用不同的功能。您可以阅读有关此 https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/version-compatibility 和 https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/application-compatibility 的更多信息。这是 .NET Framework 行为,无法由 BenchmarkDotNet 或任何其他工具控制。