Skip to content

Commit 502dc9a

Browse files
authored
CoreRT feed and version update (#1606)
* update the integration test * update CoreRtToolchain to use new CoreRT NuGet feed and compiler version * update docs * CoreRtToolchain for TFMs prior to net5.0 should keep using the old CoreRT compiler and old NuGet feed, only .NET5+ should use the new version * change CoreRT version detection to use .NET Core version detection code (it's well tested) * re-enable CoreRT(s) test which is possible after the CI got updated to .NET 5 SDK * update AzureDevOps VM image to windows-2019 which contains VS 2019 and fixes CoreRT build errors * change the way we install clang 3.9 on Azure Devops Ubuntu * try suggestion from Michal * previous fix helped Linux, but broke macOS ;)
1 parent e01312a commit 502dc9a

File tree

12 files changed

+65
-64
lines changed

12 files changed

+65
-64
lines changed

azure-pipelines.Ubuntu.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ jobs:
1515
scriptFileName: ./build.sh
1616
initialization:
1717
- bash: |
18-
echo "deb https://llvm.org/apt/xenial/ llvm-toolchain-xenial-3.9 main" | sudo tee /etc/apt/sources.list.d/llvm.list
19-
wget -O - https://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
18+
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
19+
sudo apt-add-repository "deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-3.9 main"
2020
sudo apt-get update
2121
- bash: |
2222
sudo apt-get install cmake clang-3.9 libicu55 uuid-dev libcurl4-openssl-dev zlib1g-dev libkrb5-dev

azure-pipelines.Windows.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ jobs:
1111
- template: build/azure-pipelines.job.template.yml
1212
parameters:
1313
name: Windows
14-
vmImage: 'vs2017-win2016'
14+
vmImage: 'windows-2019'
1515
scriptFileName: .\build.ps1

docs/articles/configs/toolchains.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -190,26 +190,26 @@ Example: `dotnet run -c Release -- --coreRun "C:\Projects\corefx\bin\testhost\ne
190190

191191
## CoreRT
192192

193-
BenchmarkDotNet supports [CoreRT](https://github.com/dotnet/corert)! However, you might want to know how it works to get a better understanding of the results that you get.
193+
BenchmarkDotNet supports [CoreRT](https://github.com/dotnet/runtimelab/tree/feature/NativeAOT)! However, you might want to know how it works to get a better understanding of the results that you get.
194194

195195
* CoreRT is a flavor of .NET Core. Which means that:
196-
* you have to target .NET Core to be able to build CoreRT benchmarks (`<TargetFramework>netcoreapp2.1</TargetFramework>` in the .csproj file)
197-
* you have to specify the CoreRT runtime in an explicit way, either by using `[SimpleJob]` attribute or by using the fluent Job config API `Job.ShortRun.With(CoreRtRuntime.$version)`
198-
* to run CoreRT benchmark you run the app as a .NET Core/.NET process (`dotnet run -c Release -f netcoreapp2.1`) and BenchmarkDotNet does all the CoreRT compilation for you. If you want to check what files are generated you need to apply `[KeepBenchmarkFiles]` attribute to the class which defines benchmarks.
196+
* you have to target .NET Core to be able to build CoreRT benchmarks (example: `<TargetFramework>net5.0</TargetFramework>` in the .csproj file)
197+
* you have to specify the CoreRT runtime in an explicit way, either by using `[SimpleJob]` attribute or by using the fluent Job config API `Job.ShortRun.With(CoreRtRuntime.$version)` or console line arguments `--runtimes corert50`
198+
* to run CoreRT benchmark you run the app as a .NET Core/.NET process (example: `dotnet run -c Release -f net5.01`) and BenchmarkDotNet does all the CoreRT compilation for you. If you want to check what files are generated you need to apply `[KeepBenchmarkFiles]` attribute to the class which defines benchmarks.
199199

200-
By default BenchmarkDotNet uses the latest version of `Microsoft.DotNet.ILCompiler` to build the CoreRT benchmark according to [this instructions](https://github.com/dotnet/corert/tree/7f902d4d8b1c3280e60f5e06c71951a60da173fb/samples/HelloWorld#add-corert-to-your-project).
200+
By default BenchmarkDotNet uses the latest version of `Microsoft.DotNet.ILCompiler` to build the CoreRT benchmark according to [this instructions](https://github.com/dotnet/runtimelab/blob/d0a37893a67c125f9b0cd8671846ff7d867df241/samples/HelloWorld/README.md#add-corert-to-your-project).
201201

202202
```cs
203203
var config = DefaultConfig.Instance
204-
.With(Job.Default.With(CoreRtRuntime.CoreRt21)); // compiles the benchmarks as netcoreapp2.1 and uses the latest CoreRT to build a native app
204+
.With(Job.Default.With(CoreRtRuntime.CoreRt50)); // compiles the benchmarks as net5.0 and uses the latest CoreRT to build a native app
205205
206206
BenchmarkSwitcher
207207
.FromAssembly(typeof(Program).Assembly)
208208
.Run(args, config);
209209
```
210210

211211
```cs
212-
[SimpleJob(RuntimeMoniker.CoreRt21)] // compiles the benchmarks as netcoreapp2.1 and uses the latest CoreRT to build a native app
212+
[SimpleJob(RuntimeMoniker.CoreRt50)] // compiles the benchmarks as net5.0 and uses the latest CoreRT to build a native app
213213
public class TheTypeWithBenchmarks
214214
{
215215
[Benchmark] // the benchmarks go here
@@ -218,15 +218,17 @@ public class TheTypeWithBenchmarks
218218

219219
**Note**: BenchmarkDotNet is going to run `dotnet restore` on the auto-generated project. The first time it does so, it's going to take a **LOT** of time to download all the dependencies (few minutes). Just give it some time and don't press `Ctrl+C` too fast ;)
220220

221-
If you want to benchmark some particular version of CoreRT you have to specify it in an explicit way:
221+
If you want to benchmark some particular version of CoreRT (or from a different NuGet feed) you have to specify it in an explicit way:
222222

223223
```cs
224224
var config = DefaultConfig.Instance
225225
.With(Job.ShortRun
226226
.With(CoreRtToolchain.CreateBuilder()
227-
.UseCoreRtNuGet(microsoftDotNetILCompilerVersion: "1.0.0-alpha-26412-02") // the version goes here
227+
.UseCoreRtNuGet(
228+
microsoftDotNetILCompilerVersion: "6.0.0-*", // the version goes here
229+
nuGetFeedUrl: "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json") // this address might change over time
228230
.DisplayName("CoreRT NuGet")
229-
.TargetFrameworkMoniker("netcoreapp2.1")
231+
.TargetFrameworkMoniker("net5.0")
230232
.ToToolchain()));
231233
```
232234

src/BenchmarkDotNet/Environments/Runtimes/CoreRtRuntime.cs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,62 +10,60 @@ public class CoreRtRuntime : Runtime
1010
/// <summary>
1111
/// CoreRT compiled as netcoreapp2.0
1212
/// </summary>
13-
public static readonly CoreRtRuntime CoreRt20 = new CoreRtRuntime(RuntimeMoniker.CoreRt20, "netcoreapp2.0", "CoreRt 2.0");
13+
public static readonly CoreRtRuntime CoreRt20 = new CoreRtRuntime(RuntimeMoniker.CoreRt20, "netcoreapp2.0", "CoreRT 2.0");
1414
/// <summary>
1515
/// CoreRT compiled as netcoreapp2.1
1616
/// </summary>
17-
public static readonly CoreRtRuntime CoreRt21 = new CoreRtRuntime(RuntimeMoniker.CoreRt21, "netcoreapp2.1", "CoreRt 2.1");
17+
public static readonly CoreRtRuntime CoreRt21 = new CoreRtRuntime(RuntimeMoniker.CoreRt21, "netcoreapp2.1", "CoreRT 2.1");
1818
/// <summary>
1919
/// CoreRT compiled as netcoreapp2.2
2020
/// </summary>
21-
public static readonly CoreRtRuntime CoreRt22 = new CoreRtRuntime(RuntimeMoniker.CoreRt22, "netcoreapp2.2", "CoreRt 2.2");
21+
public static readonly CoreRtRuntime CoreRt22 = new CoreRtRuntime(RuntimeMoniker.CoreRt22, "netcoreapp2.2", "CoreRT 2.2");
2222
/// <summary>
2323
/// CoreRT compiled as netcoreapp3.0
2424
/// </summary>
25-
public static readonly CoreRtRuntime CoreRt30 = new CoreRtRuntime(RuntimeMoniker.CoreRt30, "netcoreapp3.0", "CoreRt 3.0");
25+
public static readonly CoreRtRuntime CoreRt30 = new CoreRtRuntime(RuntimeMoniker.CoreRt30, "netcoreapp3.0", "CoreRT 3.0");
2626
/// <summary>
2727
/// CoreRT compiled as netcoreapp3.1
2828
/// </summary>
29-
public static readonly CoreRtRuntime CoreRt31 = new CoreRtRuntime(RuntimeMoniker.CoreRt31, "netcoreapp3.1", "CoreRt 3.1");
29+
public static readonly CoreRtRuntime CoreRt31 = new CoreRtRuntime(RuntimeMoniker.CoreRt31, "netcoreapp3.1", "CoreRT 3.1");
3030
/// <summary>
3131
/// CoreRT compiled as net5.0
3232
/// </summary>
33-
public static readonly CoreRtRuntime CoreRt50 = new CoreRtRuntime(RuntimeMoniker.CoreRt50, "net5.0", "CoreRt 5.0");
33+
public static readonly CoreRtRuntime CoreRt50 = new CoreRtRuntime(RuntimeMoniker.CoreRt50, "net5.0", "CoreRT 5.0");
3434
/// <summary>
3535
/// CoreRT compiled as net6.0
3636
/// </summary>
37-
public static readonly CoreRtRuntime CoreRt60 = new CoreRtRuntime(RuntimeMoniker.CoreRt50, "net6.0", "CoreRt 6.0");
37+
public static readonly CoreRtRuntime CoreRt60 = new CoreRtRuntime(RuntimeMoniker.CoreRt50, "net6.0", "CoreRT 6.0");
3838

3939
private CoreRtRuntime(RuntimeMoniker runtimeMoniker, string msBuildMoniker, string displayName)
4040
: base(runtimeMoniker, msBuildMoniker, displayName)
4141
{
4242
}
4343

44-
internal static CoreRtRuntime GetCurrentVersion()
44+
public static CoreRtRuntime GetCurrentVersion()
4545
{
4646
if (!RuntimeInformation.IsNetCore && !RuntimeInformation.IsCoreRT)
4747
{
4848
throw new NotSupportedException("It's impossible to reliably detect the version of CoreRT if the process is not a .NET Core or CoreRT process!");
4949
}
5050

51-
var frameworkDescription = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;
52-
string netCoreAppVersion = new string(frameworkDescription.SkipWhile(c => !char.IsDigit(c)).ToArray());
53-
string[] versionNumbers = netCoreAppVersion.Split('.');
54-
string msBuildMoniker = int.Parse(versionNumbers[0]) >= 5 ? $"net{versionNumbers[0]}.{versionNumbers[1]}" : $"netcoreapp{versionNumbers[0]}.{versionNumbers[1]}";
55-
string displayName = $"CoreRT {versionNumbers[0]}.{versionNumbers[1]}";
51+
if (!CoreRuntime.TryGetVersion(out var version))
52+
{
53+
throw new NotSupportedException("Failed to recognize CoreRT version");
54+
}
5655

57-
switch (msBuildMoniker)
56+
switch (version)
5857
{
59-
case "netcoreapp2.0": return CoreRt20;
60-
case "netcoreapp2.1": return CoreRt21;
61-
case "netcoreapp2.2": return CoreRt22;
62-
case "netcoreapp3.0": return CoreRt30;
63-
case "netcoreapp3.1": return CoreRt31;
64-
case "net5.0":
65-
case "netcoreapp5.0": return CoreRt50;
66-
case "net6.0": return CoreRt60;
67-
default: // support future version of CoreRT
68-
return new CoreRtRuntime(RuntimeMoniker.NotRecognized, msBuildMoniker, displayName);
58+
case Version v when v.Major == 2 && v.Minor == 0: return CoreRt20;
59+
case Version v when v.Major == 2 && v.Minor == 1: return CoreRt21;
60+
case Version v when v.Major == 2 && v.Minor == 2: return CoreRt22;
61+
case Version v when v.Major == 3 && v.Minor == 0: return CoreRt30;
62+
case Version v when v.Major == 3 && v.Minor == 1: return CoreRt31;
63+
case Version v when v.Major == 5 && v.Minor == 0: return CoreRt50;
64+
case Version v when v.Major == 6 && v.Minor == 0: return CoreRt60;
65+
default:
66+
return new CoreRtRuntime(RuntimeMoniker.NotRecognized, $"net{version.Major}.{version.Minor}", $"CoreRT {version.Major}.{version.Minor}");
6967
}
7068
}
7169
}

src/BenchmarkDotNet/Toolchains/CoreRt/CoreRtToolchain.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,31 @@ namespace BenchmarkDotNet.Toolchains.CoreRt
88
public class CoreRtToolchain : Toolchain
99
{
1010
/// <summary>
11-
/// compiled as netcoreapp2.0, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
11+
/// compiled as netcoreapp2.0, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
1212
/// </summary>
1313
public static readonly IToolchain Core20 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("netcoreapp2.0").ToToolchain();
1414
/// <summary>
15-
/// compiled as netcoreapp2.1, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
15+
/// compiled as netcoreapp2.1, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
1616
/// </summary>
1717
public static readonly IToolchain Core21 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("netcoreapp2.1").ToToolchain();
1818
/// <summary>
19-
/// compiled as netcoreapp2.2, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
19+
/// compiled as netcoreapp2.2, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
2020
/// </summary>
2121
public static readonly IToolchain Core22 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("netcoreapp2.2").ToToolchain();
2222
/// <summary>
23-
/// compiled as netcoreapp3.0, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
23+
/// compiled as netcoreapp3.0, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
2424
/// </summary>
2525
public static readonly IToolchain Core30 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("netcoreapp3.0").ToToolchain();
2626
/// <summary>
27-
/// compiled as netcoreapp3.1, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
27+
/// compiled as netcoreapp3.1, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
2828
/// </summary>
2929
public static readonly IToolchain Core31 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("netcoreapp3.1").ToToolchain();
3030
/// <summary>
31-
/// compiled as net5.0, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
31+
/// compiled as net5.0, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
3232
/// </summary>
3333
public static readonly IToolchain Core50 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("net5.0").ToToolchain();
3434
/// <summary>
35-
/// compiled as net6.0, targets latest (1.0.0-alpha-*) CoreRT build from https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
35+
/// compiled as net6.0, targets latest (6.0.0-*) CoreRT build from the new feed: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json
3636
/// </summary>
3737
public static readonly IToolchain Core60 = CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker("net6.0").ToToolchain();
3838

src/BenchmarkDotNet/Toolchains/CoreRt/CoreRtToolchainBuilder.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ public class CoreRtToolchainBuilder : CustomDotNetCliToolchainBuilder
2323

2424
/// <summary>
2525
/// creates a CoreRT toolchain targeting NuGet build of CoreRT
26-
/// Based on https://github.com/dotnet/corert/blob/7f902d4d8b1c3280e60f5e06c71951a60da173fb/samples/HelloWorld/README.md#add-corert-to-your-project
26+
/// Based on https://github.com/dotnet/runtimelab/blob/d0a37893a67c125f9b0cd8671846ff7d867df241/samples/HelloWorld/README.md#add-corert-to-your-project
2727
/// </summary>
28-
/// <param name="microsoftDotNetILCompilerVersion">the version of Microsoft.DotNet.ILCompiler which should be used. The default is: "1.0.0-alpha-*"</param>
29-
/// <param name="nuGetFeedUrl">url to NuGet CoreRT feed, The default is: "https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json"</param>
28+
/// <param name="microsoftDotNetILCompilerVersion">the version of Microsoft.DotNet.ILCompiler which should be used. The default is: "6.0.0-*"</param>
29+
/// <param name="nuGetFeedUrl">url to NuGet CoreRT feed, The default is: "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json"</param>
3030
[PublicAPI]
31-
public CoreRtToolchainBuilder UseCoreRtNuGet(string microsoftDotNetILCompilerVersion = "1.0.0-alpha-*", string nuGetFeedUrl = "https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json")
31+
public CoreRtToolchainBuilder UseCoreRtNuGet(string microsoftDotNetILCompilerVersion = "6.0.0-*", string nuGetFeedUrl = "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-experimental/nuget/v3/index.json")
3232
{
3333
coreRtVersion = microsoftDotNetILCompilerVersion ?? throw new ArgumentNullException(nameof(microsoftDotNetILCompilerVersion));
3434

src/BenchmarkDotNet/Toolchains/CoreRt/Generator.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ private string GenerateProjectForNuGetBuild(BuildPartition buildPartition, Artif
136136
<RootAllApplicationAssemblies>{rootAllApplicationAssemblies}</RootAllApplicationAssemblies>
137137
<IlcGenerateCompleteTypeMetadata>{ilcGenerateCompleteTypeMetadata}</IlcGenerateCompleteTypeMetadata>
138138
<IlcGenerateStackTraceData>{ilcGenerateStackTraceData}</IlcGenerateStackTraceData>
139+
<EnsureNETCoreAppRuntime>false</EnsureNETCoreAppRuntime> <!-- workaround for 'This runtime may not be supported by.NET Core.' error -->
139140
</PropertyGroup>
140141
{GetRuntimeSettings(buildPartition.RepresentativeBenchmarkCase.Job.Environment.Gc, buildPartition.Resolver)}
141142
<ItemGroup>
@@ -148,6 +149,9 @@ private string GenerateProjectForNuGetBuild(BuildPartition buildPartition, Artif
148149
<ItemGroup>
149150
<RdXmlFile Include=""rd.xml"" />
150151
</ItemGroup>
152+
<ItemGroup Condition="" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' "">
153+
<LinkerArg Include=""-lanl"" />
154+
</ItemGroup>
151155
</Project>";
152156

153157
private string GenerateProjectForLocalBuild(BuildPartition buildPartition, ArtifactsPaths artifactsPaths, ILogger logger) => $@"
@@ -182,6 +186,9 @@ private string GenerateProjectForLocalBuild(BuildPartition buildPartition, Artif
182186
<ItemGroup>
183187
<RdXmlFile Include=""rd.xml"" />
184188
</ItemGroup>
189+
<ItemGroup Condition="" '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' "">
190+
<LinkerArg Include=""-lanl"" />
191+
</ItemGroup>
185192
</Project>";
186193

187194
/// <summary>

tests/BenchmarkDotNet.IntegrationTests.ManualRunning/LocalCoreRtToolchainTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void CanBenchmarkLocalCoreRtUsingRyuJit()
2929
{
3030
var config = ManualConfig.CreateEmpty()
3131
.AddJob(Job.Dry
32-
.WithRuntime(CoreRtRuntime.CoreRt21)
32+
.WithRuntime(CoreRtRuntime.CoreRt50)
3333
.WithToolchain(
3434
CoreRtToolchain.CreateBuilder()
3535
.UseCoreRtLocal(IlcPath)
@@ -43,7 +43,7 @@ public void CanBenchmarkLocalCoreRtUsingCppCodeGen()
4343
{
4444
var config = ManualConfig.CreateEmpty()
4545
.AddJob(Job.Dry
46-
.WithRuntime(CoreRtRuntime.CoreRt21)
46+
.WithRuntime(CoreRtRuntime.CoreRt50)
4747
.WithToolchain(
4848
CoreRtToolchain.CreateBuilder()
4949
.UseCoreRtLocal(IlcPath)

tests/BenchmarkDotNet.IntegrationTests/BuildTimeoutTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ public void WhenBuildTakesMoreTimeThanTheTimeoutTheBuildIsCancelled()
2626

2727
var config = ManualConfig.CreateEmpty()
2828
.AddJob(Job.Dry
29-
.WithRuntime(CoreRtRuntime.CoreRt21)
29+
.WithRuntime(CoreRtRuntime.CoreRt50)
3030
.WithToolchain(CoreRtToolchain.CreateBuilder()
31-
.UseCoreRtNuGet(microsoftDotNetILCompilerVersion: "1.0.0-alpha-27408-02") // we test against specific version to keep this test stable
31+
.UseCoreRtNuGet(microsoftDotNetILCompilerVersion: "6.0.0-alpha.1.20602.1") // we test against specific version to keep this test stable
3232
.Timeout(timeout)
3333
.ToToolchain()));
3434

0 commit comments

Comments
 (0)