Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ private static Job CreateJobForGivenRuntime(Job baseJob, string runtimeId, Comma
case RuntimeMoniker.Net481:
return baseJob
.WithRuntime(runtimeMoniker.GetRuntime())
.WithToolchain(CsProjClassicNetToolchain.From(runtimeId, options.RestorePath?.FullName));
.WithToolchain(CsProjClassicNetToolchain.From(runtimeId, options.RestorePath?.FullName, options.CliPath?.FullName));

case RuntimeMoniker.NetCoreApp20:
case RuntimeMoniker.NetCoreApp21:
Expand Down
1 change: 1 addition & 0 deletions src/BenchmarkDotNet/Diagnosers/PerfCollectProfiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ private void EnsureSymbolsForNativeRuntime(DiagnoserActionParameters parameters)
{
string cliPath = parameters.BenchmarkCase.GetToolchain() switch
{
CsProjClassicNetToolchain classic => classic.CustomDotNetCliPath,
CsProjCoreToolchain core => core.CustomDotNetCliPath,
CoreRunToolchain coreRun => coreRun.CustomDotNetCliPath.FullName,
NativeAotToolchain nativeAot => nativeAot.CustomDotNetCliPath,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,19 @@ public class CsProjClassicNetToolchain : Toolchain
[PublicAPI] public static readonly IToolchain Net48 = new CsProjClassicNetToolchain("net48", ".NET Framework 4.8");
[PublicAPI] public static readonly IToolchain Net481 = new CsProjClassicNetToolchain("net481", ".NET Framework 4.8.1");

private CsProjClassicNetToolchain(string targetFrameworkMoniker, string name, string packagesPath = null)
internal string CustomDotNetCliPath { get; }

private CsProjClassicNetToolchain(string targetFrameworkMoniker, string name, string packagesPath = null, string customDotNetCliPath = null)
: base(name,
new CsProjGenerator(targetFrameworkMoniker, cliPath: null, packagesPath: packagesPath, runtimeFrameworkVersion: null, isNetCore: false),
new DotNetCliBuilder(targetFrameworkMoniker, customDotNetCliPath: null),
new CsProjGenerator(targetFrameworkMoniker, customDotNetCliPath, packagesPath, runtimeFrameworkVersion: null, isNetCore: false),
new DotNetCliBuilder(targetFrameworkMoniker, customDotNetCliPath),
new Executor())
{
CustomDotNetCliPath = customDotNetCliPath;
}

public static IToolchain From(string targetFrameworkMoniker, string packagesPath = null)
=> new CsProjClassicNetToolchain(targetFrameworkMoniker, targetFrameworkMoniker, packagesPath);
public static IToolchain From(string targetFrameworkMoniker, string packagesPath = null, string customDotNetCliPath = null)
=> new CsProjClassicNetToolchain(targetFrameworkMoniker, targetFrameworkMoniker, packagesPath, customDotNetCliPath);

public override IEnumerable<ValidationError> Validate(BenchmarkCase benchmarkCase, IResolver resolver)
{
Expand All @@ -47,7 +50,7 @@ public override IEnumerable<ValidationError> Validate(BenchmarkCase benchmarkCas
$"Classic .NET toolchain is supported only for Windows, benchmark '{benchmarkCase.DisplayInfo}' will not be executed",
benchmarkCase);
}
else if (IsCliPathInvalid(customDotNetCliPath: null, benchmarkCase, out var invalidCliError))
else if (IsCliPathInvalid(CustomDotNetCliPath, benchmarkCase, out var invalidCliError))
{
yield return invalidCliError;
}
Expand Down
26 changes: 18 additions & 8 deletions tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -270,20 +270,30 @@ public void IlCompilerPathParsedCorrectly()
}

[Theory]
[InlineData("netcoreapp2.0")]
[InlineData("netcoreapp2.1")]
[InlineData("netcoreapp2.2")]
[InlineData("netcoreapp3.0")]
public void DotNetCliParsedCorrectly(string tfm)
[InlineData("netcoreapp2.0", true)]
[InlineData("netcoreapp2.1", true)]
[InlineData("netcoreapp2.2", true)]
[InlineData("netcoreapp3.0", true)]
[InlineData("net462", false)]
[InlineData("net48", false)]
public void DotNetCliParsedCorrectly(string tfm, bool isCore)
{
var fakeDotnetCliPath = typeof(object).Assembly.Location;
var config = ConfigParser.Parse(new[] { "-r", tfm, "--cli", fakeDotnetCliPath }, new OutputLogger(Output)).config;

Assert.Single(config.GetJobs());
CsProjCoreToolchain toolchain = config.GetJobs().Single().GetToolchain() as CsProjCoreToolchain;
Assert.NotNull(toolchain);
var toolchain = config.GetJobs().Single().GetToolchain();
if (isCore)
{
Assert.True(toolchain is CsProjCoreToolchain);
Assert.Equal(fakeDotnetCliPath, ((CsProjCoreToolchain) toolchain).CustomDotNetCliPath);
}
else
{
Assert.True(toolchain is CsProjClassicNetToolchain);
Assert.Equal(fakeDotnetCliPath, ((CsProjClassicNetToolchain) toolchain).CustomDotNetCliPath);
}
Assert.Equal(tfm, ((DotNetCliGenerator)toolchain.Generator).TargetFrameworkMoniker);
Assert.Equal(fakeDotnetCliPath, toolchain.CustomDotNetCliPath);
}

[Theory]
Expand Down