diff --git a/docs/articles/configs/toolchains.md b/docs/articles/configs/toolchains.md
index 0bae3ffdff..538891d601 100644
--- a/docs/articles/configs/toolchains.md
+++ b/docs/articles/configs/toolchains.md
@@ -18,14 +18,14 @@ When you run your benchmarks without specifying the toolchain in an explicit way
If you want to test multiple frameworks, your project file **MUST target all of them** and you **MUST install the corresponding SDKs**:
```xml
-netcoreapp3.0;netcoreapp2.1;net48
+netcoreapp3.1;net8.0;net48
```
If you run your benchmarks without specifying any custom settings, BenchmarkDotNet is going to run the benchmarks **using the same framework as the host process**:
```cmd
-dotnet run -c Release -f netcoreapp2.1 # is going to run the benchmarks using .NET Core 2.1
-dotnet run -c Release -f netcoreapp3.0 # is going to run the benchmarks using .NET Core 3.0
+dotnet run -c Release -f netcoreapp3.1 # is going to run the benchmarks using .NET Core 3.1
+dotnet run -c Release -f net8.0 # is going to run the benchmarks using .NET 8.0
dotnet run -c Release -f net48 # is going to run the benchmarks using .NET 4.8
mono $pathToExe # is going to run the benchmarks using Mono from your PATH
```
@@ -33,8 +33,8 @@ mono $pathToExe # is going to run the benchmarks using Mo
To run the benchmarks for multiple runtimes with a single command, you need to specify the target framework moniker names via `--runtimes|-r` console argument:
```cmd
-dotnet run -c Release -f netcoreapp2.1 --runtimes netcoreapp2.1 netcoreapp3.0 # is going to run the benchmarks using .NET Core 2.1 and .NET Core 3.0
-dotnet run -c Release -f netcoreapp2.1 --runtimes netcoreapp2.1 net48 # is going to run the benchmarks using .NET Core 2.1 and .NET 4.8
+dotnet run -c Release -f net8.0 --runtimes net8.0 netcoreapp3.1 # is going to run the benchmarks using .NET 8.0 and .NET Core 3.1
+dotnet run -c Release -f net8.0 --runtimes net8.0 net48 # is going to run the benchmarks using .NET 8.0 and .NET 4.8
```
What is going to happen if you provide multiple Full .NET Framework monikers? Let's say:
@@ -67,8 +67,8 @@ namespace BenchmarkDotNet.Samples
{
[SimpleJob(RuntimeMoniker.Net48)]
[SimpleJob(RuntimeMoniker.Mono)]
- [SimpleJob(RuntimeMoniker.NetCoreApp21)]
- [SimpleJob(RuntimeMoniker.NetCoreApp30)]
+ [SimpleJob(RuntimeMoniker.NetCoreApp31)]
+ [SimpleJob(RuntimeMoniker.Net80)]
public class TheClassWithBenchmarks
```
@@ -115,9 +115,9 @@ public class MyConfig : ManualConfig
Add(Job.Default.With(
CsProjCoreToolchain.From(
new NetCoreAppSettings(
- targetFrameworkMoniker: "netcoreapp2.1",
- runtimeFrameworkVersion: "2.1.0-preview2-25628-01",
- name: ".NET Core 2.1"))));
+ targetFrameworkMoniker: "net8.0-windows",
+ runtimeFrameworkVersion: "8.0.101",
+ name: ".NET 8.0 Windows"))));
}
}
```
@@ -146,11 +146,11 @@ public class CustomPathsConfig : ManualConfig
public CustomPathsConfig()
{
var dotnetCli32bit = NetCoreAppSettings
- .NetCoreApp20
+ .NetCoreApp31
.WithCustomDotNetCliPath(@"C:\Program Files (x86)\dotnet\dotnet.exe", "32 bit cli");
var dotnetCli64bit = NetCoreAppSettings
- .NetCoreApp20
+ .NetCoreApp31
.WithCustomDotNetCliPath(@"C:\Program Files\dotnet\dotnet.exe", "64 bit cli");
AddJob(Job.RyuJitX86.WithToolchain(CsProjCoreToolchain.From(dotnetCli32bit)).WithId("32 bit cli"));
diff --git a/docs/articles/faq.md b/docs/articles/faq.md
index 1fcfb13b1a..8f1cd41dc3 100644
--- a/docs/articles/faq.md
+++ b/docs/articles/faq.md
@@ -13,9 +13,9 @@ See also: [BenchmarkDotNet#237](https://github.com/dotnet/BenchmarkDotNet/issues
* **Q** Why can't I install BenchmarkDotNet in a new .NET Core Console App in Visual Studio 2017?
- **A** BenchmarkDotNet supports only netcoreapp2.0+.
+ **A** BenchmarkDotNet supports only netcoreapp3.1+.
Some old Visual Studio 2017 can create a new application which targets netcoreapp1.0.
-You should upgrade it up to 2.0.
+You should upgrade it up to 3.1.
If you want to target netcoreapp1.0 in your main assembly, it's recommended to create a separated project for benchmarks.
* **Q** I created a new .NET Core Console App in Visual Studio 2017. Now I want to run my code on CoreCLR, full .NET Framework, and Mono. How can I do it?
@@ -23,7 +23,7 @@ If you want to target netcoreapp1.0 in your main assembly, it's recommended to c
**A** Use the following lines in your `.csproj` file:
```xml
- netcoreapp2.0;net46
+ netcoreapp3.1;net46AnyCPU
```
@@ -33,7 +33,7 @@ If you want to target netcoreapp1.0 in your main assembly, it's recommended to c
[CoreJob, ClrJob, MonoJob]
```
-* **Q** My source code targets old versions of .NET Framework or .NET Core, but BenchmarkDotNet requires `net461` and `netcoreapp2.0`. How can I run benchmarks in this case?
+* **Q** My source code targets old versions of .NET Framework or .NET Core, but BenchmarkDotNet requires `net461` and `netcoreapp3.1`. How can I run benchmarks in this case?
**A** It's a good practice to introduce an additional console application (e.g. `MyAwesomeLibrary.Benchmarks`) which will depend on your code and BenchmarkDotNet.
Due to the fact that users usually run benchmarks in a develop environment and don't distribute benchmarks for users, it shouldn't be a problem.
diff --git a/docs/articles/guides/console-args.md b/docs/articles/guides/console-args.md
index 6fc5ddb245..032cc81da6 100644
--- a/docs/articles/guides/console-args.md
+++ b/docs/articles/guides/console-args.md
@@ -117,28 +117,29 @@ You can also filter the benchmarks by categories:
The `--runtimes` or just `-r` allows you to run the benchmarks for selected Runtimes. Available options are:
* Clr - BDN will either use Roslyn (if you run it as .NET app) or latest installed .NET SDK to build the benchmarks (if you run it as .NET Core app).
-* Core - if you run it as .NET Core app, BDN will use the same target framework moniker, if you run it as .NET app it's going to use netcoreapp2.1.
+* Core - if you run it as .NET Core app, BDN will use the same target framework moniker, if you run it as .NET app it's going to use net8.0.
* Mono - it's going to use the Mono from `$Path`, you can override it with `--monoPath`.
-* net46, net461, net462, net47, net471, net472 - to build and run benchmarks against specific .NET framework version.
-* netcoreapp2.0, netcoreapp2.1, netcoreapp2.2, netcoreapp3.0, netcoreapp3.1, net5.0, net6.0, net7.0 - to build and run benchmarks against specific .NET Core version.
-* nativeaot5.0, nativeaot6.0, nativeaot7.0 - to build and run benchmarks using NativeAOT. Can be customized with additional options: `--ilcPath`, `--ilCompilerVersion`.
+* net46, net461, net462, net47, net471, net472, net48, net481 - to build and run benchmarks against specific .NET Framework version.
+* netcoreapp3.1, net5.0, net6.0, net7.0, net8.0 - to build and run benchmarks against specific .NET (Core) version.
+* nativeaot5.0, nativeaot6.0, nativeaot7.0, nativeaot8.0 - to build and run benchmarks using NativeAOT. Can be customized with additional options: `--ilcPath`, `--ilCompilerVersion`.
+* mono6.0, mono7.0, mono8.0 - to build and run benchmarks with .Net 6+ using MonoVM.
-Example: run the benchmarks for .NET 4.7.2 and .NET Core 2.1:
+Example: run the benchmarks for .NET 4.7.2 and .NET 8.0:
```log
-dotnet run -c Release -- --runtimes net472 netcoreapp2.1
+dotnet run -c Release -- --runtimes net472 net8.0
```
-Example: run the benchmarks for .NET Core 3.0 and latest .NET SDK installed on your PC:
+Example: run the benchmarks for .NET Core 3.1 and latest .NET SDK installed on your PC:
```log
-dotnet run -c Release -f netcoreapp3.0 -- --runtimes clr core
+dotnet run -c Release -f netcoreapp3.1 -- --runtimes clr core
```
-But same command executed with `-f netcoreapp2.0` is going to run the benchmarks for .NET Core 2.0:
+But same command executed with `-f net6.0` is going to run the benchmarks for .NET 6.0:
```log
-dotnet run -c Release -f netcoreapp2.0 -- --runtimes clr core
+dotnet run -c Release -f net6.0 -- --runtimes clr core
```
## Number of invocations and iterations
@@ -207,10 +208,10 @@ To perform a Mann–Whitney U Test and display the results in a dedicated column
* `--statisticalTest`- Threshold for Mann–Whitney U Test. Examples: 5%, 10ms, 100ns, 1s
-Example: run Mann–Whitney U test with relative ratio of 5% for all benchmarks for .NET Core 2.0 (base) vs .NET Core 2.1 (diff). .NET Core 2.0 will be baseline because it was first.
+Example: run Mann–Whitney U test with relative ratio of 5% for all benchmarks for .NET 6.0 (base) vs .NET 8.0 (diff). .NET 6.0 will be baseline because it was first.
```log
-dotnet run -c Release -- --filter * --runtimes netcoreapp2.0 netcoreapp2.1 --statisticalTest 5%
+dotnet run -c Release -- --filter * --runtimes net6.0 net8.0 --statisticalTest 5%
```
## More
diff --git a/docs/articles/guides/troubleshooting.md b/docs/articles/guides/troubleshooting.md
index 1a998886cc..2574f3d1aa 100644
--- a/docs/articles/guides/troubleshooting.md
+++ b/docs/articles/guides/troubleshooting.md
@@ -11,7 +11,7 @@ How do you know that BenchmarkDotNet has failed to build the project? BDN is goi
// ***** BenchmarkRunner: Start *****
// ***** Found 1 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
-// start dotnet restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 /p:Deterministic=true /p:Optimize=true in C:\Projects\BenchmarkDotNet\samples\BenchmarkDotNet.Samples\bin\Release\netcoreapp2.1\c6045772-d3c7-4dbe-ab37-4aca6dcb6ec4
+// start dotnet restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 /p:Deterministic=true /p:Optimize=true in C:\Projects\BenchmarkDotNet\samples\BenchmarkDotNet.Samples\bin\Release\net8.0\c6045772-d3c7-4dbe-ab37-4aca6dcb6ec4
// command took 0.51s and exited with 1
// ***** Done, took 00:00:00 (0.66 sec) *****
// Found 1 benchmarks:
@@ -20,10 +20,10 @@ How do you know that BenchmarkDotNet has failed to build the project? BDN is goi
// Build Error: Standard output:
Standard error:
- C:\Projects\BenchmarkDotNet\samples\BenchmarkDotNet.Samples\bin\Release\netcoreapp2.1\c6045772-d3c7-4dbe-ab37-4aca6dcb6ec4\BenchmarkDotNet.Autogenerated.csproj(36,1): error MSB4025: The project file could not be loaded. Unexpected end of file while parsing Comment has occurred. Line 36, position 1.
+ C:\Projects\BenchmarkDotNet\samples\BenchmarkDotNet.Samples\bin\Release\net8.0\c6045772-d3c7-4dbe-ab37-4aca6dcb6ec4\BenchmarkDotNet.Autogenerated.csproj(36,1): error MSB4025: The project file could not be loaded. Unexpected end of file while parsing Comment has occurred. Line 36, position 1.
// BenchmarkDotNet has failed to build the auto-generated boilerplate code.
-// It can be found in C:\Projects\BenchmarkDotNet\samples\BenchmarkDotNet.Samples\bin\Release\netcoreapp2.1\c6045772-d3c7-4dbe-ab37-4aca6dcb6ec4
+// It can be found in C:\Projects\BenchmarkDotNet\samples\BenchmarkDotNet.Samples\bin\Release\net8.0\c6045772-d3c7-4dbe-ab37-4aca6dcb6ec4
// Please follow the troubleshooting guide: https://benchmarkdotnet.org/articles/guides/troubleshooting.html
```
diff --git a/samples/BenchmarkDotNet.Samples/IntroEnvVars.cs b/samples/BenchmarkDotNet.Samples/IntroEnvVars.cs
index 59bd2db82f..822f73b6bc 100644
--- a/samples/BenchmarkDotNet.Samples/IntroEnvVars.cs
+++ b/samples/BenchmarkDotNet.Samples/IntroEnvVars.cs
@@ -14,8 +14,8 @@ private class ConfigWithCustomEnvVars : ManualConfig
public ConfigWithCustomEnvVars()
{
- AddJob(Job.Default.WithRuntime(CoreRuntime.Core21).WithId("Inlining enabled"));
- AddJob(Job.Default.WithRuntime(CoreRuntime.Core21)
+ AddJob(Job.Default.WithRuntime(CoreRuntime.Core80).WithId("Inlining enabled"));
+ AddJob(Job.Default.WithRuntime(CoreRuntime.Core80)
.WithEnvironmentVariables(new EnvironmentVariable(JitNoInline, "1"))
.WithId("Inlining disabled"));
}
diff --git a/samples/BenchmarkDotNet.Samples/IntroFluentConfigBuilder.cs b/samples/BenchmarkDotNet.Samples/IntroFluentConfigBuilder.cs
index 94c34c1cbd..4ac29919ee 100644
--- a/samples/BenchmarkDotNet.Samples/IntroFluentConfigBuilder.cs
+++ b/samples/BenchmarkDotNet.Samples/IntroFluentConfigBuilder.cs
@@ -38,7 +38,7 @@ public static void Run()
.Run(
DefaultConfig.Instance
.AddJob(Job.Default.WithRuntime(ClrRuntime.Net462))
- .AddJob(Job.Default.WithRuntime(CoreRuntime.Core21))
+ .AddJob(Job.Default.WithRuntime(CoreRuntime.Core80))
.AddValidator(ExecutionValidator.FailOnError));
}
}
diff --git a/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs b/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs
index 4fc2db7388..78541a763f 100644
--- a/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs
+++ b/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs
@@ -57,22 +57,27 @@ public enum RuntimeMoniker
///
/// .NET Core 2.0
///
- NetCoreApp20,
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
+ // Assigning explicit values so we can check for them without the compiler erroring.
+ NetCoreApp20 = 10,
///
/// .NET Core 2.1
///
- NetCoreApp21,
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
+ NetCoreApp21 = 11,
///
/// .NET Core 2.2
///
- NetCoreApp22,
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
+ NetCoreApp22 = 12,
///
/// .NET Core 3.0
///
- NetCoreApp30,
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
+ NetCoreApp30 = 13,
///
/// .NET Core 3.1
diff --git a/src/BenchmarkDotNet.Diagnostics.dotMemory/DotMemoryDiagnoser.cs b/src/BenchmarkDotNet.Diagnostics.dotMemory/DotMemoryDiagnoser.cs
index c97f066fa4..c61f308fcc 100644
--- a/src/BenchmarkDotNet.Diagnostics.dotMemory/DotMemoryDiagnoser.cs
+++ b/src/BenchmarkDotNet.Diagnostics.dotMemory/DotMemoryDiagnoser.cs
@@ -107,11 +107,6 @@ internal override bool IsSupported(RuntimeMoniker runtimeMoniker)
case RuntimeMoniker.NetCoreApp50:
#pragma warning restore CS0618 // Type or member is obsolete
return false;
- case RuntimeMoniker.NetCoreApp20:
- case RuntimeMoniker.NetCoreApp21:
- case RuntimeMoniker.NetCoreApp22:
- return OsDetector.IsWindows();
- case RuntimeMoniker.NetCoreApp30:
case RuntimeMoniker.NetCoreApp31:
return OsDetector.IsWindows() || OsDetector.IsLinux();
default:
diff --git a/src/BenchmarkDotNet.Diagnostics.dotTrace/DotTraceDiagnoser.cs b/src/BenchmarkDotNet.Diagnostics.dotTrace/DotTraceDiagnoser.cs
index be02cc30c8..b650ab84fa 100644
--- a/src/BenchmarkDotNet.Diagnostics.dotTrace/DotTraceDiagnoser.cs
+++ b/src/BenchmarkDotNet.Diagnostics.dotTrace/DotTraceDiagnoser.cs
@@ -110,11 +110,6 @@ internal override bool IsSupported(RuntimeMoniker runtimeMoniker)
case RuntimeMoniker.NetCoreApp50:
#pragma warning restore CS0618 // Type or member is obsolete
return false;
- case RuntimeMoniker.NetCoreApp20:
- case RuntimeMoniker.NetCoreApp21:
- case RuntimeMoniker.NetCoreApp22:
- return OsDetector.IsWindows();
- case RuntimeMoniker.NetCoreApp30:
case RuntimeMoniker.NetCoreApp31:
return OsDetector.IsWindows() || OsDetector.IsLinux();
default:
diff --git a/src/BenchmarkDotNet/BenchmarkDotNet.csproj b/src/BenchmarkDotNet/BenchmarkDotNet.csproj
index 547c50b6e5..ae80474f11 100644
--- a/src/BenchmarkDotNet/BenchmarkDotNet.csproj
+++ b/src/BenchmarkDotNet/BenchmarkDotNet.csproj
@@ -22,9 +22,9 @@
-
-
-
+
+
+
diff --git a/src/BenchmarkDotNet/ConsoleArguments/CommandLineOptions.cs b/src/BenchmarkDotNet/ConsoleArguments/CommandLineOptions.cs
index e3aed1fedd..1dcc93281a 100644
--- a/src/BenchmarkDotNet/ConsoleArguments/CommandLineOptions.cs
+++ b/src/BenchmarkDotNet/ConsoleArguments/CommandLineOptions.cs
@@ -237,8 +237,8 @@ public static IEnumerable Examples
yield return new Example("Use Job.ShortRun for running the benchmarks", shortName, new CommandLineOptions { BaseJob = "short" });
yield return new Example("Run benchmarks in process", shortName, new CommandLineOptions { RunInProcess = true });
- yield return new Example("Run benchmarks for .NET 4.7.2, .NET Core 2.1 and Mono. .NET 4.7.2 will be baseline because it was first.", longName, new CommandLineOptions { Runtimes = new[] { "net472", "netcoreapp2.1", "Mono" } });
- yield return new Example("Run benchmarks for .NET Core 2.0, .NET Core 2.1 and .NET Core 2.2. .NET Core 2.0 will be baseline because it was first.", longName, new CommandLineOptions { Runtimes = new[] { "netcoreapp2.0", "netcoreapp2.1", "netcoreapp2.2" } });
+ yield return new Example("Run benchmarks for .NET 4.7.2, .NET 8.0 and Mono. .NET 4.7.2 will be baseline because it was first.", longName, new CommandLineOptions { Runtimes = new[] { "net472", "net8.0", "Mono" } });
+ yield return new Example("Run benchmarks for .NET Core 3.1, .NET 6.0 and .NET 8.0. .NET Core 3.1 will be baseline because it was first.", longName, new CommandLineOptions { Runtimes = new[] { "netcoreapp3.1", "net6.0", "net8.0" } });
yield return new Example("Use MemoryDiagnoser to get GC stats", shortName, new CommandLineOptions { UseMemoryDiagnoser = true });
yield return new Example("Use DisassemblyDiagnoser to get disassembly", shortName, new CommandLineOptions { UseDisassemblyDiagnoser = true });
yield return new Example("Use HardwareCountersDiagnoser to get hardware counter info", longName, new CommandLineOptions { HardwareCounters = new[] { nameof(HardwareCounter.CacheMisses), nameof(HardwareCounter.InstructionRetired) } });
@@ -250,8 +250,8 @@ public static IEnumerable Examples
yield return new Example("Run selected benchmarks once per iteration", longName, new CommandLineOptions { RunOncePerIteration = true });
yield return new Example("Run selected benchmarks 100 times per iteration. Perform single warmup iteration and 5 actual workload iterations", longName, new CommandLineOptions { InvocationCount = 100, WarmupIterationCount = 1, IterationCount = 5});
yield return new Example("Run selected benchmarks 250ms per iteration. Perform from 9 to 15 iterations", longName, new CommandLineOptions { IterationTimeInMilliseconds = 250, MinIterationCount = 9, MaxIterationCount = 15});
- yield return new Example("Run MannWhitney test with relative ratio of 5% for all benchmarks for .NET Core 2.0 (base) vs .NET Core 2.1 (diff). .NET Core 2.0 will be baseline because it was provided as first.", longName,
- new CommandLineOptions { Filters = new[] { "*"}, Runtimes = new[] { "netcoreapp2.0", "netcoreapp2.1" }, StatisticalTestThreshold = "5%" });
+ yield return new Example("Run MannWhitney test with relative ratio of 5% for all benchmarks for .NET 6.0 (base) vs .NET 8.0 (diff). .NET Core 6.0 will be baseline because it was provided as first.", longName,
+ new CommandLineOptions { Filters = new[] { "*"}, Runtimes = new[] { "net6.0", "net8.0" }, StatisticalTestThreshold = "5%" });
yield return new Example("Run benchmarks using environment variables 'ENV_VAR_KEY_1' with value 'value_1' and 'ENV_VAR_KEY_2' with value 'value_2'", longName,
new CommandLineOptions { EnvironmentVariables = new[] { "ENV_VAR_KEY_1:value_1", "ENV_VAR_KEY_2:value_2" } });
yield return new Example("Hide Mean and Ratio columns (use double quotes for multi-word columns: \"Alloc Ratio\")", shortName, new CommandLineOptions { HiddenColumns = new[] { "Mean", "Ratio" }, });
diff --git a/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs b/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs
index 355f1a6b75..9ec37c39eb 100644
--- a/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs
+++ b/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs
@@ -519,10 +519,6 @@ private static Job CreateJobForGivenRuntime(Job baseJob, string runtimeId, Comma
.WithRuntime(runtimeMoniker.GetRuntime())
.WithToolchain(CsProjClassicNetToolchain.From(runtimeId, options.RestorePath?.FullName, options.CliPath?.FullName));
- case RuntimeMoniker.NetCoreApp20:
- case RuntimeMoniker.NetCoreApp21:
- case RuntimeMoniker.NetCoreApp22:
- case RuntimeMoniker.NetCoreApp30:
case RuntimeMoniker.NetCoreApp31:
#pragma warning disable CS0618 // Type or member is obsolete
case RuntimeMoniker.NetCoreApp50:
diff --git a/src/BenchmarkDotNet/Diagnosers/EventPipeProfiler.cs b/src/BenchmarkDotNet/Diagnosers/EventPipeProfiler.cs
index c1c76e8c9e..81f1abdf75 100644
--- a/src/BenchmarkDotNet/Diagnosers/EventPipeProfiler.cs
+++ b/src/BenchmarkDotNet/Diagnosers/EventPipeProfiler.cs
@@ -62,9 +62,9 @@ public IEnumerable Validate(ValidationParameters validationPara
{
var runtime = benchmark.Job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance);
- if (runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp30)
+ if (runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp31)
{
- yield return new ValidationError(true, $"{nameof(EventPipeProfiler)} supports only .NET Core 3.0+", benchmark);
+ yield return new ValidationError(true, $"{nameof(EventPipeProfiler)} supports only .NET Core 3.1+", benchmark);
}
}
}
diff --git a/src/BenchmarkDotNet/Diagnosers/ThreadingDiagnoser.cs b/src/BenchmarkDotNet/Diagnosers/ThreadingDiagnoser.cs
index 057a0bb624..dd2a60efca 100644
--- a/src/BenchmarkDotNet/Diagnosers/ThreadingDiagnoser.cs
+++ b/src/BenchmarkDotNet/Diagnosers/ThreadingDiagnoser.cs
@@ -43,9 +43,9 @@ public IEnumerable Validate(ValidationParameters validationPara
{
var runtime = benchmark.Job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance);
- if (runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp30)
+ if (runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp31)
{
- yield return new ValidationError(true, $"{nameof(ThreadingDiagnoser)} supports only .NET Core 3.0+", benchmark);
+ yield return new ValidationError(true, $"{nameof(ThreadingDiagnoser)} supports only .NET Core 3.1+", benchmark);
}
}
}
diff --git a/src/BenchmarkDotNet/Disassemblers/DisassemblyDiagnoser.cs b/src/BenchmarkDotNet/Disassemblers/DisassemblyDiagnoser.cs
index 7d0f95326c..1c98b0752c 100644
--- a/src/BenchmarkDotNet/Disassemblers/DisassemblyDiagnoser.cs
+++ b/src/BenchmarkDotNet/Disassemblers/DisassemblyDiagnoser.cs
@@ -117,11 +117,6 @@ public IEnumerable Validate(ValidationParameters validationPara
{
var runtime = benchmark.Job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance);
- if (runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp30)
- {
- yield return new ValidationError(true, $"{nameof(DisassemblyDiagnoser)} supports only .NET Core 3.0+", benchmark);
- }
-
if (ptrace_scope.Value == "2")
{
yield return new ValidationError(false, $"ptrace_scope is set to 2, {nameof(DisassemblyDiagnoser)} is going to work only if you run as sudo");
diff --git a/src/BenchmarkDotNet/Engines/GcStats.cs b/src/BenchmarkDotNet/Engines/GcStats.cs
index ca60b0deea..9c4c639737 100644
--- a/src/BenchmarkDotNet/Engines/GcStats.cs
+++ b/src/BenchmarkDotNet/Engines/GcStats.cs
@@ -39,7 +39,7 @@ private GcStats(int gen0Collections, int gen1Collections, int gen2Collections, l
public long? GetBytesAllocatedPerOperation(BenchmarkCase benchmarkCase)
{
- bool excludeAllocationQuantumSideEffects = benchmarkCase.GetRuntime().RuntimeMoniker <= RuntimeMoniker.NetCoreApp20; // the issue got fixed for .NET Core 2.0+ https://github.com/dotnet/coreclr/issues/10207
+ bool excludeAllocationQuantumSideEffects = benchmarkCase.GetRuntime().RuntimeMoniker <= (RuntimeMoniker) 10; // the issue got fixed for .NET Core 2.0+ https://github.com/dotnet/coreclr/issues/10207
long? allocatedBytes = GetTotalAllocatedBytes(excludeAllocationQuantumSideEffects);
return allocatedBytes == null ? null
diff --git a/src/BenchmarkDotNet/Environments/Runtimes/CoreRuntime.cs b/src/BenchmarkDotNet/Environments/Runtimes/CoreRuntime.cs
index d86e4b0f40..8e4c508285 100644
--- a/src/BenchmarkDotNet/Environments/Runtimes/CoreRuntime.cs
+++ b/src/BenchmarkDotNet/Environments/Runtimes/CoreRuntime.cs
@@ -11,9 +11,13 @@ namespace BenchmarkDotNet.Environments
{
public class CoreRuntime : Runtime
{
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
public static readonly CoreRuntime Core20 = new (RuntimeMoniker.NetCoreApp20, "netcoreapp2.0", ".NET Core 2.0");
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
public static readonly CoreRuntime Core21 = new (RuntimeMoniker.NetCoreApp21, "netcoreapp2.1", ".NET Core 2.1");
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
public static readonly CoreRuntime Core22 = new (RuntimeMoniker.NetCoreApp22, "netcoreapp2.2", ".NET Core 2.2");
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
public static readonly CoreRuntime Core30 = new (RuntimeMoniker.NetCoreApp30, "netcoreapp3.0", ".NET Core 3.0");
public static readonly CoreRuntime Core31 = new (RuntimeMoniker.NetCoreApp31, "netcoreapp3.1", ".NET Core 3.1");
public static readonly CoreRuntime Core50 = new (RuntimeMoniker.Net50, "net5.0", ".NET 5.0");
@@ -64,10 +68,6 @@ internal static CoreRuntime FromVersion(Version version)
{
switch (version)
{
- case Version v when v.Major == 2 && v.Minor == 0: return Core20;
- case Version v when v.Major == 2 && v.Minor == 1: return Core21;
- case Version v when v.Major == 2 && v.Minor == 2: return Core22;
- case Version v when v.Major == 3 && v.Minor == 0: return Core30;
case Version v when v.Major == 3 && v.Minor == 1: return Core31;
case Version v when v.Major == 5 && v.Minor == 0: return GetPlatformSpecific(Core50);
case Version v when v.Major == 6 && v.Minor == 0: return GetPlatformSpecific(Core60);
@@ -75,7 +75,9 @@ internal static CoreRuntime FromVersion(Version version)
case Version v when v.Major == 8 && v.Minor == 0: return GetPlatformSpecific(Core80);
case Version v when v.Major == 9 && v.Minor == 0: return GetPlatformSpecific(Core90);
default:
- return CreateForNewVersion($"net{version.Major}.{version.Minor}", $".NET {version.Major}.{version.Minor}");
+ return version >= new Version(3, 1)
+ ? CreateForNewVersion($"net{version.Major}.{version.Minor}", $".NET {version.Major}.{version.Minor}")
+ : throw new PlatformNotSupportedException($"netcoreapp{version.Major}.{version.Minor} is no longer supported. Use a newer runtime version or use BenchmarkDotNet v0.14.X or older.");
}
}
diff --git a/src/BenchmarkDotNet/Environments/Runtimes/Runtime.cs b/src/BenchmarkDotNet/Environments/Runtimes/Runtime.cs
index b695de321c..4a46e6456d 100644
--- a/src/BenchmarkDotNet/Environments/Runtimes/Runtime.cs
+++ b/src/BenchmarkDotNet/Environments/Runtimes/Runtime.cs
@@ -18,7 +18,7 @@ public abstract class Runtime : IEquatable
public RuntimeMoniker RuntimeMoniker { get; }
///
- /// MsBuild Target Framework Moniker, example: net462, netcoreapp2.1
+ /// MsBuild Target Framework Moniker, example: net462, net8.0
///
public string MsBuildMoniker { get; }
diff --git a/src/BenchmarkDotNet/Extensions/RuntimeMonikerExtensions.cs b/src/BenchmarkDotNet/Extensions/RuntimeMonikerExtensions.cs
index 5ba51eebdd..03d44c1ba7 100644
--- a/src/BenchmarkDotNet/Extensions/RuntimeMonikerExtensions.cs
+++ b/src/BenchmarkDotNet/Extensions/RuntimeMonikerExtensions.cs
@@ -24,14 +24,6 @@ internal static Runtime GetRuntime(this RuntimeMoniker runtimeMoniker)
return ClrRuntime.Net48;
case RuntimeMoniker.Net481:
return ClrRuntime.Net481;
- case RuntimeMoniker.NetCoreApp20:
- return CoreRuntime.Core20;
- case RuntimeMoniker.NetCoreApp21:
- return CoreRuntime.Core21;
- case RuntimeMoniker.NetCoreApp22:
- return CoreRuntime.Core22;
- case RuntimeMoniker.NetCoreApp30:
- return CoreRuntime.Core30;
case RuntimeMoniker.NetCoreApp31:
return CoreRuntime.Core31;
case RuntimeMoniker.Net50:
diff --git a/src/BenchmarkDotNet/Helpers/ArtifactFileNameHelper.cs b/src/BenchmarkDotNet/Helpers/ArtifactFileNameHelper.cs
index b85f9fd297..6873bb834b 100644
--- a/src/BenchmarkDotNet/Helpers/ArtifactFileNameHelper.cs
+++ b/src/BenchmarkDotNet/Helpers/ArtifactFileNameHelper.cs
@@ -69,7 +69,7 @@ private static string GetLimitedFilePath(DiagnoserActionParameters details, stri
private static string GetFilePath(string fileName, DiagnoserActionParameters details, string? subfolder, DateTime? creationTime, string fileExtension)
{
- // if we run for more than one toolchain, the output file name should contain the name too so we can differ net462 vs netcoreapp2.1 etc
+ // if we run for more than one toolchain, the output file name should contain the name too so we can differ net462 vs net8.0 etc
if (details.Config.GetJobs().Select(job => ToolchainExtensions.GetToolchain(job)).Distinct().Count() > 1)
fileName += $"-{details.BenchmarkCase.Job.Environment.Runtime?.Name ?? details.BenchmarkCase.GetToolchain()?.Name ?? details.BenchmarkCase.Job.Id}";
diff --git a/src/BenchmarkDotNet/Toolchains/CoreRun/CoreRunToolchain.cs b/src/BenchmarkDotNet/Toolchains/CoreRun/CoreRunToolchain.cs
index 8bdacf37a4..3cbaa80f65 100644
--- a/src/BenchmarkDotNet/Toolchains/CoreRun/CoreRunToolchain.cs
+++ b/src/BenchmarkDotNet/Toolchains/CoreRun/CoreRunToolchain.cs
@@ -15,12 +15,12 @@ public class CoreRunToolchain : IToolchain
///
/// the path to CoreRun
/// /should a copy of CoreRun be performed? True by default. The toolchain replaces old dependencies in CoreRun folder with newer versions if used by the benchmarks.
- /// TFM, netcoreapp2.1 is the default
+ /// TFM, net8.0 is the default
/// path to dotnet cli, if not provided the one from PATH will be used
/// display name, CoreRun is the default value
/// the directory to restore packages to
public CoreRunToolchain(FileInfo coreRun, bool createCopy = true,
- string targetFrameworkMoniker = "netcoreapp2.1",
+ string targetFrameworkMoniker = "net8.0",
FileInfo? customDotNetCliPath = null, DirectoryInfo? restorePath = null,
string displayName = "CoreRun")
{
diff --git a/src/BenchmarkDotNet/Toolchains/CsProj/CsProjCoreToolchain.cs b/src/BenchmarkDotNet/Toolchains/CsProj/CsProjCoreToolchain.cs
index c6cf6248df..65fa9239d2 100644
--- a/src/BenchmarkDotNet/Toolchains/CsProj/CsProjCoreToolchain.cs
+++ b/src/BenchmarkDotNet/Toolchains/CsProj/CsProjCoreToolchain.cs
@@ -15,9 +15,13 @@ namespace BenchmarkDotNet.Toolchains.CsProj
[PublicAPI]
public class CsProjCoreToolchain : Toolchain, IEquatable
{
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly IToolchain NetCoreApp20 = From(NetCoreAppSettings.NetCoreApp20);
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly IToolchain NetCoreApp21 = From(NetCoreAppSettings.NetCoreApp21);
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly IToolchain NetCoreApp22 = From(NetCoreAppSettings.NetCoreApp22);
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly IToolchain NetCoreApp30 = From(NetCoreAppSettings.NetCoreApp30);
[PublicAPI] public static readonly IToolchain NetCoreApp31 = From(NetCoreAppSettings.NetCoreApp31);
[PublicAPI] public static readonly IToolchain NetCoreApp50 = From(NetCoreAppSettings.NetCoreApp50);
diff --git a/src/BenchmarkDotNet/Toolchains/DotNetCli/CustomDotNetCliToolchainBuilder.cs b/src/BenchmarkDotNet/Toolchains/DotNetCli/CustomDotNetCliToolchainBuilder.cs
index 3e56c6be24..6223f9ea3c 100644
--- a/src/BenchmarkDotNet/Toolchains/DotNetCli/CustomDotNetCliToolchainBuilder.cs
+++ b/src/BenchmarkDotNet/Toolchains/DotNetCli/CustomDotNetCliToolchainBuilder.cs
@@ -50,7 +50,7 @@ public CustomDotNetCliToolchainBuilder UseNuGetClearTag(bool value)
return this;
}
- /// TFM, example: netcoreapp2.1
+ /// TFM, example: net8.0
[PublicAPI]
[SuppressMessage("ReSharper", "ParameterHidesMember")]
public CustomDotNetCliToolchainBuilder TargetFrameworkMoniker(string targetFrameworkMoniker)
diff --git a/src/BenchmarkDotNet/Toolchains/DotNetCli/NetCoreAppSettings.cs b/src/BenchmarkDotNet/Toolchains/DotNetCli/NetCoreAppSettings.cs
index 6f48698cb9..9da421396f 100644
--- a/src/BenchmarkDotNet/Toolchains/DotNetCli/NetCoreAppSettings.cs
+++ b/src/BenchmarkDotNet/Toolchains/DotNetCli/NetCoreAppSettings.cs
@@ -1,5 +1,6 @@
using BenchmarkDotNet.Toolchains.MonoAotLLVM;
using JetBrains.Annotations;
+using System;
namespace BenchmarkDotNet.Toolchains.DotNetCli
{
@@ -9,9 +10,13 @@ namespace BenchmarkDotNet.Toolchains.DotNetCli
[PublicAPI]
public class NetCoreAppSettings
{
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly NetCoreAppSettings NetCoreApp20 = new ("netcoreapp2.0", null, ".NET Core 2.0");
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly NetCoreAppSettings NetCoreApp21 = new ("netcoreapp2.1", null, ".NET Core 2.1");
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly NetCoreAppSettings NetCoreApp22 = new ("netcoreapp2.2", null, ".NET Core 2.2");
+ [Obsolete("This runtime is no longer supported. Use a newer runtime or use BenchmarkDotNet v0.14.X or older.", true)]
[PublicAPI] public static readonly NetCoreAppSettings NetCoreApp30 = new ("netcoreapp3.0", null, ".NET Core 3.0");
[PublicAPI] public static readonly NetCoreAppSettings NetCoreApp31 = new ("netcoreapp3.1", null, ".NET Core 3.1");
[PublicAPI] public static readonly NetCoreAppSettings NetCoreApp50 = new ("net5.0", null, ".NET 5.0");
@@ -22,7 +27,7 @@ public class NetCoreAppSettings
///
///
- /// sample values: netcoreapp2.0, netcoreapp2.1
+ /// sample values: net6.0, net8.0
///
///
/// used in the auto-generated .csproj file
@@ -64,7 +69,7 @@ public NetCoreAppSettings(
}
///
- /// sample values: netcoreapp2.0, netcoreapp2.1
+ /// sample values: net6.0, net8.0
///
public string TargetFrameworkMoniker { get; }
diff --git a/src/BenchmarkDotNet/Toolchains/ToolchainExtensions.cs b/src/BenchmarkDotNet/Toolchains/ToolchainExtensions.cs
index 499d5d8f40..75d2898d0a 100644
--- a/src/BenchmarkDotNet/Toolchains/ToolchainExtensions.cs
+++ b/src/BenchmarkDotNet/Toolchains/ToolchainExtensions.cs
@@ -123,18 +123,6 @@ private static IToolchain GetToolchain(RuntimeMoniker runtimeMoniker)
case RuntimeMoniker.Net481:
return CsProjClassicNetToolchain.Net481;
- case RuntimeMoniker.NetCoreApp20:
- return CsProjCoreToolchain.NetCoreApp20;
-
- case RuntimeMoniker.NetCoreApp21:
- return CsProjCoreToolchain.NetCoreApp21;
-
- case RuntimeMoniker.NetCoreApp22:
- return CsProjCoreToolchain.NetCoreApp22;
-
- case RuntimeMoniker.NetCoreApp30:
- return CsProjCoreToolchain.NetCoreApp30;
-
case RuntimeMoniker.NetCoreApp31:
return CsProjCoreToolchain.NetCoreApp31;
#pragma warning disable CS0618 // Type or member is obsolete
diff --git a/src/BenchmarkDotNet/Validators/DotNetSdkVersionValidator.cs b/src/BenchmarkDotNet/Validators/DotNetSdkVersionValidator.cs
index 8b61a0d51c..93a3af80dd 100644
--- a/src/BenchmarkDotNet/Validators/DotNetSdkVersionValidator.cs
+++ b/src/BenchmarkDotNet/Validators/DotNetSdkVersionValidator.cs
@@ -204,10 +204,6 @@ private static string GetSdkVersionFromMoniker(RuntimeMoniker runtimeMoniker)
RuntimeMoniker.Net472 => "4.7.2",
RuntimeMoniker.Net48 => "4.8",
RuntimeMoniker.Net481 => "4.8.1",
- RuntimeMoniker.NetCoreApp20 => "2.0",
- RuntimeMoniker.NetCoreApp21 => "2.1",
- RuntimeMoniker.NetCoreApp22 => "2.2",
- RuntimeMoniker.NetCoreApp30 => "3.0",
RuntimeMoniker.NetCoreApp31 => "3.1",
RuntimeMoniker.Net50 => "5.0",
RuntimeMoniker.Net60 => "6.0",
diff --git a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks.csproj b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks.csproj
index 8c8374eaf0..13377c7765 100644
--- a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks.csproj
+++ b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks.csproj
@@ -2,18 +2,11 @@
BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks
-
+
+ net462;net48;netcoreapp3.1;net8.0
+
+ $(NoWarn);NETSDK1138;NU1901;NU1902;NU1903;NU1904false
-
-
-
-
-
-
-
-
-
- net462;net48;net8.0trueBenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworksBenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks
@@ -45,10 +38,10 @@
-
-
+
-
+
+ allruntime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/MultipleFrameworksTest.cs b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/MultipleFrameworksTest.cs
index 0e9eb6f80d..a73a47e7c2 100644
--- a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/MultipleFrameworksTest.cs
+++ b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks/MultipleFrameworksTest.cs
@@ -8,21 +8,18 @@
namespace BenchmarkDotNet.IntegrationTests.ManualRunning
{
- // Note: To properly test this locally, modify
- // BenchmarkDotNet.IntegrationTests.ManualRunning.MultipleFrameworks.csproj,
- // following the comments in that file.
public class MultipleFrameworksTest : BenchmarkTestExecutor
{
private const string TfmEnvVarName = "TfmEnvVarName";
[Theory]
- [InlineData(RuntimeMoniker.Net461)]
+ [InlineData(RuntimeMoniker.Net462)]
[InlineData(RuntimeMoniker.Net48)]
- [InlineData(RuntimeMoniker.NetCoreApp20)]
+ [InlineData(RuntimeMoniker.NetCoreApp31)]
[InlineData(RuntimeMoniker.Net80)]
public void EachFrameworkIsRebuilt(RuntimeMoniker runtime)
{
-#if NET461
+#if NET462
// We cannot detect what target framework version the host was compiled for on full Framework,
// which causes the RoslynToolchain to be used instead of CsProjClassicNetToolchain when the host is full Framework
// (because full Framework always uses the version that's installed on the machine, unlike Core),
@@ -43,12 +40,12 @@ public void EachFrameworkIsRebuilt(RuntimeMoniker runtime)
public class ValuePerTfm
{
private const RuntimeMoniker moniker =
-#if NET461
- RuntimeMoniker.Net461;
+#if NET462
+ RuntimeMoniker.Net462;
#elif NET48
RuntimeMoniker.Net48;
-#elif NETCOREAPP2_0
- RuntimeMoniker.NetCoreApp20;
+#elif NETCOREAPP3_1
+ RuntimeMoniker.NetCoreApp31;
#elif NET8_0
RuntimeMoniker.Net80;
#else
diff --git a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/LocalNativeAotToolchainTests.cs b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/LocalNativeAotToolchainTests.cs
index c8740a3829..64f469efc7 100644
--- a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/LocalNativeAotToolchainTests.cs
+++ b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/LocalNativeAotToolchainTests.cs
@@ -13,7 +13,7 @@ namespace BenchmarkDotNet.IntegrationTests.ManualRunning
/// to run these tests please clone and build NativeAOT first,
/// then update the hardcoded path
/// and run following command from console:
- /// dotnet test -c Release -f netcoreapp2.1 --filter "FullyQualifiedName~BenchmarkDotNet.IntegrationTests.ManualRunning.LocalNativeAotToolchainTests"
+ /// dotnet test -c Release -f net8.0 --filter "FullyQualifiedName~BenchmarkDotNet.IntegrationTests.ManualRunning.LocalNativeAotToolchainTests"
///
/// in perfect world we would do this OOB for you, but building NativeAOT
/// so it's not part of our CI jobs
@@ -29,7 +29,7 @@ public void CanBenchmarkLocalBuildUsingRyuJit()
{
var config = ManualConfig.CreateEmpty()
.AddJob(Job.Dry
- .WithRuntime(NativeAotRuntime.Net60)
+ .WithRuntime(NativeAotRuntime.Net80)
.WithToolchain(
NativeAotToolchain.CreateBuilder()
.UseLocalBuild(new System.IO.DirectoryInfo(IlcPath))
diff --git a/tests/BenchmarkDotNet.IntegrationTests/MemoryDiagnoserTests.cs b/tests/BenchmarkDotNet.IntegrationTests/MemoryDiagnoserTests.cs
index db3dddfe2e..b805af6d26 100755
--- a/tests/BenchmarkDotNet.IntegrationTests/MemoryDiagnoserTests.cs
+++ b/tests/BenchmarkDotNet.IntegrationTests/MemoryDiagnoserTests.cs
@@ -257,8 +257,7 @@ public void Allocate()
}
}
- [TheoryEnvSpecific(".NET Core 3.0 preview6+ exposes a GC.GetTotalAllocatedBytes method which makes it possible to work",
- EnvRequirement.DotNetCore30Only)]
+ [Theory(Skip = "Test is flaky even in latest .Net")]
[MemberData(nameof(GetToolchains))]
[Trait(Constants.Category, Constants.BackwardCompatibilityCategory)]
public void MemoryDiagnoserIsAccurateForMultiThreadedBenchmarks(IToolchain toolchain)
diff --git a/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs b/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
index 5da3fd7a21..73d29d3611 100644
--- a/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
+++ b/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
@@ -271,10 +271,10 @@ public void IlCompilerPathParsedCorrectly()
}
[Theory]
- [InlineData("netcoreapp2.0", true)]
- [InlineData("netcoreapp2.1", true)]
- [InlineData("netcoreapp2.2", true)]
- [InlineData("netcoreapp3.0", true)]
+ [InlineData("netcoreapp3.1", true)]
+ [InlineData("net5.0", true)]
+ [InlineData("net6.0", true)]
+ [InlineData("net8.0", true)]
[InlineData("net462", false)]
[InlineData("net48", false)]
public void DotNetCliParsedCorrectly(string tfm, bool isCore)
@@ -333,7 +333,7 @@ public void WhenConfigOptionsFlagsAreNotSpecifiedTheyAreNotSet()
public void PackagesPathParsedCorrectly()
{
var fakeRestoreDirectory = new FileInfo(typeof(object).Assembly.Location).Directory.FullName;
- var config = ConfigParser.Parse(new[] { "-r", "netcoreapp3.0", "--packages", fakeRestoreDirectory }, new OutputLogger(Output)).config;
+ var config = ConfigParser.Parse(new[] { "-r", "netcoreapp3.1", "--packages", fakeRestoreDirectory }, new OutputLogger(Output)).config;
Assert.Single(config.GetJobs());
CsProjCoreToolchain toolchain = config.GetJobs().Single().GetToolchain() as CsProjCoreToolchain;
@@ -345,7 +345,7 @@ public void PackagesPathParsedCorrectly()
public void UserCanSpecifyBuildTimeout()
{
const int timeoutInSeconds = 10;
- var config = ConfigParser.Parse(new[] { "-r", "netcoreapp3.0", "--buildTimeout", timeoutInSeconds.ToString() }, new OutputLogger(Output)).config;
+ var config = ConfigParser.Parse(new[] { "-r", "netcoreapp3.1", "--buildTimeout", timeoutInSeconds.ToString() }, new OutputLogger(Output)).config;
Assert.Single(config.GetJobs());
CsProjCoreToolchain toolchain = config.GetJobs().Single().GetToolchain() as CsProjCoreToolchain;
@@ -356,7 +356,7 @@ public void UserCanSpecifyBuildTimeout()
[Fact]
public void WhenUserDoesNotSpecifyTimeoutTheDefaultValueIsUsed()
{
- var config = ConfigParser.Parse(new[] { "-r", "netcoreapp3.0" }, new OutputLogger(Output)).config;
+ var config = ConfigParser.Parse(new[] { "-r", "netcoreapp3.1" }, new OutputLogger(Output)).config;
Assert.Single(config.GetJobs());
CsProjCoreToolchain toolchain = config.GetJobs().Single().GetToolchain() as CsProjCoreToolchain;
@@ -414,15 +414,15 @@ public void PlatformSpecificMonikersAreSupported(string msBuildMoniker)
[Fact]
public void CanCompareFewDifferentRuntimes()
{
- var config = ConfigParser.Parse(new[] { "--runtimes", "net462", "MONO", "netcoreapp3.0", "nativeaot6.0", "nativeAOT7.0", "nativeAOT8.0" },
+ var config = ConfigParser.Parse(["--runtimes", "net462", "MONO", "netcoreapp3.1", "nativeaot6.0", "nativeAOT7.0", "nativeAOT8.0"],
new OutputLogger(Output)).config;
Assert.True(config.GetJobs().First().Meta.Baseline); // when the user provides multiple runtimes the first one should be marked as baseline
Assert.Single(config.GetJobs().Where(job => job.Environment.Runtime is ClrRuntime clrRuntime && clrRuntime.MsBuildMoniker == "net462"));
Assert.Single(config.GetJobs().Where(job => job.Environment.Runtime is MonoRuntime));
Assert.Single(config.GetJobs().Where(job =>
- job.Environment.Runtime is CoreRuntime coreRuntime && coreRuntime.MsBuildMoniker == "netcoreapp3.0" &&
- coreRuntime.RuntimeMoniker == RuntimeMoniker.NetCoreApp30));
+ job.Environment.Runtime is CoreRuntime coreRuntime && coreRuntime.MsBuildMoniker == "netcoreapp3.1" &&
+ coreRuntime.RuntimeMoniker == RuntimeMoniker.NetCoreApp31));
Assert.Single(config.GetJobs().Where(job =>
job.Environment.Runtime is NativeAotRuntime nativeAot && nativeAot.MsBuildMoniker == "net6.0" &&
nativeAot.RuntimeMoniker == RuntimeMoniker.NativeAot60));
@@ -439,7 +439,7 @@ public void CanCompareFewDifferentRuntimes()
[InlineData("10ms")]
public void CanUseStatisticalTestsToCompareFewDifferentRuntimes(string threshold)
{
- string[] arguments = ["--runtimes", "netcoreapp2.1", "netcoreapp2.2", "--statisticalTest", threshold];
+ string[] arguments = ["--runtimes", "net6.0", "net8.0", "--statisticalTest", threshold];
var config = ConfigParser.Parse(arguments, new OutputLogger(Output)).config;
var mockSummary = MockFactory.CreateSummary(config);
diff --git a/tests/BenchmarkDotNet.Tests/Configs/ImmutableConfigTests.cs b/tests/BenchmarkDotNet.Tests/Configs/ImmutableConfigTests.cs
index 2eae58c7c1..2393cb737c 100644
--- a/tests/BenchmarkDotNet.Tests/Configs/ImmutableConfigTests.cs
+++ b/tests/BenchmarkDotNet.Tests/Configs/ImmutableConfigTests.cs
@@ -249,10 +249,10 @@ public void MissingDependencyIsNotAddedWhenItIsAlreadyPresent()
[Fact]
public void WhenTwoConfigsAreAddedTheRegularJobsAreJustAdded()
{
- var configWithClrJob = CreateConfigFromJobs(Job.Default.WithRuntime(CoreRuntime.Core21));
- var configWithCoreJob = CreateConfigFromJobs(Job.Default.WithRuntime(ClrRuntime.Net462));
+ var configWithClrJob = CreateConfigFromJobs(Job.Default.WithRuntime(ClrRuntime.Net462));
+ var configWithCoreJob = CreateConfigFromJobs(Job.Default.WithRuntime(CoreRuntime.Core80));
- foreach (var added in AddLeftToTheRightAndRightToTheLef(configWithClrJob, configWithCoreJob))
+ foreach (var added in AddLeftToTheRightAndRightToTheLef(configWithCoreJob, configWithClrJob))
{
var runnableJobs = added.GetJobs();
@@ -269,7 +269,7 @@ public void WhenTwoConfigsAreAddedTheMutatorJobsAreAppliedToAllOtherJobs()
var configWithMutatorJob = CreateConfigFromJobs(Job.Default.WithWarmupCount(warmupCount).AsMutator());
var configWithTwoStandardJobs = CreateConfigFromJobs(
Job.Default.WithRuntime(ClrRuntime.Net462),
- Job.Default.WithRuntime(CoreRuntime.Core21));
+ Job.Default.WithRuntime(CoreRuntime.Core80));
foreach (var added in AddLeftToTheRightAndRightToTheLef(configWithTwoStandardJobs, configWithMutatorJob))
{
diff --git a/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs b/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs
index 050b84de7c..fd47e9fd83 100644
--- a/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs
+++ b/tests/BenchmarkDotNet.Tests/Configs/JobTests.cs
@@ -403,7 +403,7 @@ public static void Test06CharacteristicHacks()
[Fact]
public static void MutatorAppliedToOtherJobOverwritesOnlyTheConfiguredSettings()
{
- var jobBefore = Job.Default.WithRuntime(CoreRuntime.Core30); // this is a default job with Runtime set to Core
+ var jobBefore = Job.Default.WithRuntime(CoreRuntime.Core80); // this is a default job with Runtime set to Core
var copy = jobBefore.UnfreezeCopy();
Assert.False(copy.HasValue(RunMode.MaxIterationCountCharacteristic));
diff --git a/tests/BenchmarkDotNet.Tests/CsProjGeneratorTests.cs b/tests/BenchmarkDotNet.Tests/CsProjGeneratorTests.cs
index 706e74b561..ef1225432e 100644
--- a/tests/BenchmarkDotNet.Tests/CsProjGeneratorTests.cs
+++ b/tests/BenchmarkDotNet.Tests/CsProjGeneratorTests.cs
@@ -26,7 +26,7 @@ public class CsProjGeneratorTests
[Theory]
[InlineData("net471", false)]
- [InlineData("netcoreapp3.0", true)]
+ [InlineData("netcoreapp3.1", true)]
public void ItsPossibleToCustomizeProjectSdkBasedOnProjectSdkFromTheProjectFile(string targetFrameworkMoniker, bool isNetCore)
{
const string withCustomProjectSdk = @"
@@ -41,7 +41,7 @@ public void ItsImpossibleToCustomizeProjectSdkForFullFrameworkAppsBasedOnTheImpo
{
const string withCustomProjectImport = @"
-
+
";
AssertParsedSdkName(withCustomProjectImport, "net471", "Microsoft.NET.Sdk", false);
@@ -52,10 +52,10 @@ public void ItsPossibleToCustomizeProjectSdkForNetCoreAppsBasedOnTheImportOfSdk(
{
const string withCustomProjectImport = @"
-
+
";
- AssertParsedSdkName(withCustomProjectImport, "netcoreapp3.0", "Microsoft.NET.Sdk.WindowsDesktop", true);
+ AssertParsedSdkName(withCustomProjectImport, "netcoreapp3.1", "Microsoft.NET.Sdk.WindowsDesktop", true);
}
[AssertionMethod]
@@ -87,7 +87,7 @@ public void UseWpfSettingGetsCopied()
";
- var sut = new CsProjGenerator("netcoreapp3.0", null, null, null, true);
+ var sut = new CsProjGenerator("netcoreapp3.1", null, null, null, true);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(withUseWpfTrue);
@@ -117,7 +117,7 @@ public void SettingsFromPropsFileImportedUsingAbsolutePathGetCopies()
";
- var sut = new CsProjGenerator("netcoreapp3.0", null, null, null, true);
+ var sut = new CsProjGenerator("netcoreapp3.1", null, null, null, true);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(importingAbsolutePath);
@@ -149,7 +149,7 @@ public void SettingsFromPropsFileImportedUsingRelativePathGetCopies()
";
- var sut = new CsProjGenerator("netcoreapp3.0", null, null, null, true);
+ var sut = new CsProjGenerator("netcoreapp3.1", null, null, null, true);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(importingRelativePath);
@@ -171,7 +171,7 @@ public void RuntimeHostConfigurationOptionIsCopied()
{runtimeHostConfigurationOptionChunk}
";
- var sut = new CsProjGenerator("netcoreapp3.0", null, null, null, true);
+ var sut = new CsProjGenerator("netcoreapp3.1", null, null, null, true);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(source);
@@ -196,7 +196,7 @@ public void TheDefaultFilePathShouldBeUsedWhenAnAssemblyLocationIsEmpty()
var benchmarkCase = BenchmarkCase.Create(target, Job.Default, null, config);
var benchmarks = new[] { new BenchmarkBuildInfo(benchmarkCase, config.CreateImmutableConfig(), 999) };
- var projectGenerator = new SteamLoadedBuildPartition("netcoreapp3.0", null, null, null, true);
+ var projectGenerator = new SteamLoadedBuildPartition("netcoreapp3.1", null, null, null, true);
string binariesPath = projectGenerator.ResolvePathForBinaries(new BuildPartition(benchmarks, new Resolver()), programName);
string expectedPath = Path.Combine(Path.Combine(Directory.GetCurrentDirectory(), "BenchmarkDotNet.Bin"), programName);
@@ -210,7 +210,7 @@ public void TestAssemblyFilePathIsUsedWhenTheAssemblyLocationIsNotEmpty()
var target = new Descriptor(MockFactory.MockType, MockFactory.MockMethodInfo);
var benchmarkCase = BenchmarkCase.Create(target, Job.Default, null, ManualConfig.CreateEmpty().CreateImmutableConfig());
var benchmarks = new[] { new BenchmarkBuildInfo(benchmarkCase, ManualConfig.CreateEmpty().CreateImmutableConfig(), 0) };
- var projectGenerator = new SteamLoadedBuildPartition("netcoreapp3.0", null, null, null, true);
+ var projectGenerator = new SteamLoadedBuildPartition("netcoreapp3.1", null, null, null, true);
var buildPartition = new BuildPartition(benchmarks, new Resolver());
string binariesPath = projectGenerator.ResolvePathForBinaries(buildPartition, programName);
diff --git a/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs b/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs
index 8952accb40..92811e5933 100644
--- a/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs
+++ b/tests/BenchmarkDotNet.Tests/Reports/SummaryTests.cs
@@ -35,7 +35,7 @@ public void SummaryWithFailureReportDoesNotThrowNre()
private static IConfig CreateConfig()
{
// We use runtime as selector later. It is chosen as selector just to be close to initial issue. Nothing particularly special about it.
- Job coreJob = new Job(Job.Default).WithRuntime(CoreRuntime.Core20).ApplyAndFreeze(RunMode.Dry);
+ Job coreJob = new Job(Job.Default).WithRuntime(CoreRuntime.Core80).ApplyAndFreeze(RunMode.Dry);
Job clrJob = new Job(Job.Default).WithRuntime(ClrRuntime.Net462).ApplyAndFreeze(RunMode.Dry);
return ManualConfig.Create(DefaultConfig.Instance).AddJob(coreJob).AddJob(clrJob);
}
diff --git a/tests/BenchmarkDotNet.Tests/Running/BenchmarkConverterTests.cs b/tests/BenchmarkDotNet.Tests/Running/BenchmarkConverterTests.cs
index 4eb72b5d59..4b3e92d95d 100644
--- a/tests/BenchmarkDotNet.Tests/Running/BenchmarkConverterTests.cs
+++ b/tests/BenchmarkDotNet.Tests/Running/BenchmarkConverterTests.cs
@@ -135,7 +135,7 @@ public void JobMutatorsApplySettingsToAllNonMutatorJobs()
typeof(WithMutator),
DefaultConfig.Instance
.AddJob(Job.Default.WithRuntime(ClrRuntime.Net462))
- .AddJob(Job.Default.WithRuntime(CoreRuntime.Core21)));
+ .AddJob(Job.Default.WithRuntime(CoreRuntime.Core80)));
Assert.Equal(2, info.BenchmarksCases.Length);
Assert.All(info.BenchmarksCases, benchmark => Assert.Equal(int.MaxValue, benchmark.Job.Run.MaxIterationCount));
diff --git a/tests/BenchmarkDotNet.Tests/RuntimeVersionDetectionTests.cs b/tests/BenchmarkDotNet.Tests/RuntimeVersionDetectionTests.cs
index 5fa5f47051..876d0ae42e 100644
--- a/tests/BenchmarkDotNet.Tests/RuntimeVersionDetectionTests.cs
+++ b/tests/BenchmarkDotNet.Tests/RuntimeVersionDetectionTests.cs
@@ -12,12 +12,12 @@ namespace BenchmarkDotNet.Tests
public class RuntimeVersionDetectionTests
{
[Theory]
- [InlineData(".NETCoreApp,Version=v2.0", RuntimeMoniker.NetCoreApp20, "netcoreapp2.0")]
- [InlineData(".NETCoreApp,Version=v2.1", RuntimeMoniker.NetCoreApp21, "netcoreapp2.1")]
- [InlineData(".NETCoreApp,Version=v2.2", RuntimeMoniker.NetCoreApp22, "netcoreapp2.2")]
- [InlineData(".NETCoreApp,Version=v3.0", RuntimeMoniker.NetCoreApp30, "netcoreapp3.0")]
[InlineData(".NETCoreApp,Version=v3.1", RuntimeMoniker.NetCoreApp31, "netcoreapp3.1")]
[InlineData(".NETCoreApp,Version=v5.0", RuntimeMoniker.Net50, "net5.0")]
+ [InlineData(".NETCoreApp,Version=v6.0", RuntimeMoniker.Net60, "net6.0")]
+ [InlineData(".NETCoreApp,Version=v7.0", RuntimeMoniker.Net70, "net7.0")]
+ [InlineData(".NETCoreApp,Version=v8.0", RuntimeMoniker.Net80, "net8.0")]
+ [InlineData(".NETCoreApp,Version=v9.0", RuntimeMoniker.Net90, "net9.0")]
[InlineData(".NETCoreApp,Version=v123.0", RuntimeMoniker.NotRecognized, "net123.0")]
public void TryGetVersionFromFrameworkNameHandlesValidInput(string frameworkName, RuntimeMoniker expectedTfm, string expectedMsBuildMoniker)
{
@@ -40,9 +40,6 @@ public void TryGetVersionFromFrameworkNameHandlesInvalidInput(string? frameworkN
}
[Theory]
- [InlineData(RuntimeMoniker.NetCoreApp21, "netcoreapp2.1", "Microsoft .NET Framework", "4.6.27817.01 @BuiltBy: dlab14-DDVSOWINAGE101 @Branch: release/2.1 @SrcCode: https://github.com/dotnet/coreclr/tree/6f78fbb3f964b4f407a2efb713a186384a167e5c")]
- [InlineData(RuntimeMoniker.NetCoreApp22, "netcoreapp2.2", "Microsoft .NET Framework", "4.6.27817.03 @BuiltBy: dlab14-DDVSOWINAGE101 @Branch: release/2.2 @SrcCode: https://github.com/dotnet/coreclr/tree/ce1d090d33b400a25620c0145046471495067cc7")]
- [InlineData(RuntimeMoniker.NetCoreApp30, "netcoreapp3.0", "Microsoft .NET Core", "3.0.0-preview8-28379-12")]
[InlineData(RuntimeMoniker.NetCoreApp31, "netcoreapp3.1", "Microsoft .NET Core", "3.1.0-something")]
[InlineData(RuntimeMoniker.Net50, "net5.0", "Microsoft .NET Core", "5.0.0-alpha1.19415.3")]
[InlineData(RuntimeMoniker.NotRecognized, "net123.0", "Microsoft .NET Core", "123.0.0-future")]
@@ -70,10 +67,6 @@ public static IEnumerable