0

我有一个针对 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 Core:. NET Core 2.0.9(CoreCLR 4.6.26614.01、CoreFX 4.6.26614.01)、64 位 RyuJIT

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

4

1 回答 1

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/的更多信息迁移指南/应用程序兼容性。这是无法由 BenchmarkDotNet 或任何其他工具控制的 .NET Framework 行为。

于 2020-01-31T14:11:56.757 回答