我有一个针对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 Framework4.7.2 (CLR 4.0.30319.42000),64位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中执行的。
发布于 2020-01-31 14:11:56
如BenchmarkDotNet文档中所述:https://benchmarkdotnet.org/articles/configs/toolchains.html#multiple-frameworks-support
完整的.NET框架总是使用给定机器上可用的最新.NET框架来运行每个.NET可执行文件。如果您试图运行一些.NET TFMs的基准测试,那么它们都将使用您机器上的最新.NET框架来执行。唯一的区别是它们都将启用不同的特性,这取决于它们所编译的目标版本。您可以阅读更多关于这个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框架行为,不能被BenchmarkDotNet或任何其他工具控制。
https://stackoverflow.com/questions/55893930
复制相似问题