我有一个针对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),64位RyuJIT Clr:.NET Framework 4.7.2(CLR 4.0.30319.42000),64位RyuJIT-v4.7.3394.0 核心:.NET Core 2.0.9(CoreCLR 4.6.26614.01,CoreFX 4.6.26614.01),64位RyuJIT
我还注意到,即使删除了显式的作业属性,并且仅将我的项目定位为net462,运行摘要仍显示它是使用net472执行的。
答案 0 :(得分:1)
如BenchmarkDotNet文档中所述:https://benchmarkdotnet.org/articles/configs/toolchains.html#multiple-frameworks-support
完整的.NET Framework始终使用给定计算机上可用的最新.NET Framework运行每个.NET可执行文件。如果您尝试为一些.NET TFM运行基准测试,则将全部使用您计算机上的最新.NET Framework执行这些基准测试。唯一的区别是,它们都将根据为其编译的目标版本启用不同的功能。您可以阅读有关此https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/version-compatibility和https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/application-compatibility的更多信息。这是.NET Framework行为,不能由BenchmarkDotNet或任何其他工具控制。