【问题标题】:Benchmarkdotnet not respecting framework target net462Benchmarkdotnet 不尊重框架目标 net462
【发布时间】:2019-09-17 12:30:51
【问题描述】:

我有一个针对 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),64bit RyuJIT

我还注意到,即使我删除了显式作业属性并将我的项目仅定位到 net462,运行摘要仍然显示它使用 net472 执行。

【问题讨论】:

  • 您的项目可以针对 .NET 4.6.2,但如果您的系统安装了 4.7.2,那么这就是运行时的版本。与 .NET Core 不同,这些不是并行安装;只有一个 4.x CLR 运行时,已就地升级。
  • 有道理,这些都是容易忘记的现实。感谢您的回复。

标签: benchmarkdotnet


【解决方案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 的信息。这是无法由 BenchmarkDotNet 或任何其他工具控制的 .NET Framework 行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多