Benchmarkdotnet不尊重框架目标net462

时间:2019-04-28 19:37:57

标签: benchmarkdotnet

我有一个针对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执行的。

1 个答案:

答案 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-compatibilityhttps://docs.microsoft.com/en-us/dotnet/framework/migration-guide/application-compatibility的更多信息。这是.NET Framework行为,不能由BenchmarkDotNet或任何其他工具控制。