Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
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