Skip to content

Commit 008120b

Browse files
committed
Fix MultipleFrameworksTest
1 parent 1280898 commit 008120b

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

src/BenchmarkDotNet/Helpers/FrameworkVersionHelper.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ private static readonly (int minReleaseNumber, string version)[] FrameworkVersio
2424

2525
internal static string? GetTargetFrameworkVersion(Assembly? assembly)
2626
{
27+
if (assembly is null)
28+
{
29+
return null;
30+
}
31+
2732
// Look for a TargetFrameworkAttribute with a supported Framework version.
2833
foreach (var attribute in assembly.GetCustomAttributes<TargetFrameworkAttribute>())
2934
{

src/BenchmarkDotNet/Toolchains/ToolchainExtensions.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ internal static IToolchain GetToolchain(this BenchmarkCase benchmarkCase)
2525
: GetToolchain(
2626
benchmarkCase.GetRuntime(),
2727
benchmarkCase.Descriptor,
28-
benchmarkCase.Job.HasDynamicBuildCharacteristic()
28+
benchmarkCase.Job.HasDynamicBuildCharacteristic(),
29+
benchmarkCase.Job.Environment.HasValue(EnvironmentMode.RuntimeCharacteristic)
2930
);
3031

3132
internal static IToolchain GetToolchain(this Job job)
@@ -34,20 +35,26 @@ internal static IToolchain GetToolchain(this Job job)
3435
: GetToolchain(
3536
job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance),
3637
null,
37-
job.HasDynamicBuildCharacteristic()
38+
job.HasDynamicBuildCharacteristic(),
39+
job.Environment.HasValue(EnvironmentMode.RuntimeCharacteristic)
3840
);
3941

40-
internal static IToolchain GetToolchain(this Runtime runtime, Descriptor? descriptor = null, bool preferMsBuildToolchains = false)
42+
internal static IToolchain GetToolchain(this Runtime runtime, Descriptor? descriptor = null, bool preferMsBuildToolchains = false, bool isRuntimeExplicit = false)
4143
{
4244
switch (runtime)
4345
{
4446
case ClrRuntime clrRuntime:
45-
if (!preferMsBuildToolchains && RuntimeInformation.IsFullFramework
46-
&& RuntimeInformation.GetCurrentRuntime().MsBuildMoniker == runtime.MsBuildMoniker)
47+
bool ShouldUseCurrentRuntime()
4748
{
48-
return RoslynToolchain.Instance;
49+
var assembly = isRuntimeExplicit
50+
? descriptor?.WorkloadMethod.DeclaringType.Assembly
51+
: null;
52+
return runtime.MsBuildMoniker == ClrRuntime.GetTargetOrCurrentVersion(assembly).MsBuildMoniker;
4953
}
5054

55+
if (!preferMsBuildToolchains && RuntimeInformation.IsFullFramework && ShouldUseCurrentRuntime())
56+
return RoslynToolchain.Instance;
57+
5158
return clrRuntime.RuntimeMoniker != RuntimeMoniker.NotRecognized
5259
? GetToolchain(clrRuntime.RuntimeMoniker)
5360
: CsProjClassicNetToolchain.From(clrRuntime.MsBuildMoniker);

0 commit comments

Comments
 (0)