diff --git a/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs b/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs
index 1dcfc242fa..6378fa3bbb 100644
--- a/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs
+++ b/src/BenchmarkDotNet.Annotations/Jobs/RuntimeMoniker.cs
@@ -81,8 +81,6 @@ public static class RuntimeMoniker
public const string Mono10_0 = "mono10.0";
/// .NET 11 using MonoVM (not CLR which is the default)
public const string Mono11_0 = "mono11.0";
- /// .NET 12 using MonoVM (not CLR which is the default)
- public const string Mono12_0 = "mono12.0";
/// .NET 8 CLR with composite ReadyToRun compilation
public const string R2R80 = "r2r8.0";
@@ -103,8 +101,6 @@ public static class RuntimeMoniker
public const string MonoWasm10_0 = "monowasm10.0";
/// Mono WebAssembly with net11.0
public const string MonoWasm11_0 = "monowasm11.0";
- /// Mono WebAssembly with net12.0
- public const string MonoWasm12_0 = "monowasm12.0";
/// Mono WebAssembly AOT with net8.0
public const string MonoWasmAot80 = "monowasmaot8.0";
@@ -114,8 +110,6 @@ public static class RuntimeMoniker
public const string MonoWasmAot10_0 = "monowasmaot10.0";
/// Mono WebAssembly AOT with net11.0
public const string MonoWasmAot11_0 = "monowasmaot11.0";
- /// Mono WebAssembly AOT with net12.0
- public const string MonoWasmAot12_0 = "monowasmaot12.0";
// Still experimental
//public const string CoreWasm11_0 = "corewasm11.0";
diff --git a/src/BenchmarkDotNet/Environments/Runtimes/MonoCoreRuntime.cs b/src/BenchmarkDotNet/Environments/Runtimes/MonoCoreRuntime.cs
index 3d3cc7993c..634ec95a9d 100644
--- a/src/BenchmarkDotNet/Environments/Runtimes/MonoCoreRuntime.cs
+++ b/src/BenchmarkDotNet/Environments/Runtimes/MonoCoreRuntime.cs
@@ -17,7 +17,6 @@ public sealed class MonoCoreRuntime : Runtime
public static readonly MonoCoreRuntime Net90 = new(new(9, 0));
public static readonly MonoCoreRuntime Net10_0 = new(new(10, 0));
public static readonly MonoCoreRuntime Net11_0 = new(new(11, 0));
- public static readonly MonoCoreRuntime Net12_0 = new(new(12, 0));
private MonoCoreRuntime(Version version) => Version = ToRuntimeVersion(version);
@@ -37,7 +36,6 @@ public static MonoCoreRuntime From(Version version)
9 => Net90,
10 => Net10_0,
11 => Net11_0,
- 12 => Net12_0,
_ => new(version),
};
diff --git a/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmAotRuntime.cs b/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmAotRuntime.cs
index ae7b1c90e5..154d9244f0 100644
--- a/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmAotRuntime.cs
+++ b/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmAotRuntime.cs
@@ -13,7 +13,6 @@ public sealed class MonoWasmAotRuntime : WasmRuntime
public static readonly MonoWasmAotRuntime Net90 = new(new(9, 0));
public static readonly MonoWasmAotRuntime Net10_0 = new(new(10, 0));
public static readonly MonoWasmAotRuntime Net11_0 = new(new(11, 0));
- public static readonly MonoWasmAotRuntime Net12_0 = new(new(12, 0));
private MonoWasmAotRuntime(Version version) : base(version) { }
@@ -27,7 +26,6 @@ public static MonoWasmAotRuntime From(Version version)
9 => Net90,
10 => Net10_0,
11 => Net11_0,
- 12 => Net12_0,
_ => new(version),
};
diff --git a/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmRuntime.cs b/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmRuntime.cs
index 2463c418e4..4e7f6d05d4 100644
--- a/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmRuntime.cs
+++ b/src/BenchmarkDotNet/Environments/Runtimes/MonoWasmRuntime.cs
@@ -13,7 +13,6 @@ public sealed class MonoWasmRuntime : WasmRuntime
public static readonly MonoWasmRuntime Net90 = new(new(9, 0));
public static readonly MonoWasmRuntime Net10_0 = new(new(10, 0));
public static readonly MonoWasmRuntime Net11_0 = new(new(11, 0));
- public static readonly MonoWasmRuntime Net12_0 = new(new(12, 0));
private MonoWasmRuntime(Version version) : base(version) { }
@@ -27,7 +26,6 @@ public static MonoWasmRuntime From(Version version)
9 => Net90,
10 => Net10_0,
11 => Net11_0,
- 12 => Net12_0,
_ => new(version),
};
diff --git a/src/BenchmarkDotNet/Toolchains/CsProj/CsProjNetToolchain.cs b/src/BenchmarkDotNet/Toolchains/CsProj/CsProjNetToolchain.cs
index 6cf8c89402..46a2845d26 100644
--- a/src/BenchmarkDotNet/Toolchains/CsProj/CsProjNetToolchain.cs
+++ b/src/BenchmarkDotNet/Toolchains/CsProj/CsProjNetToolchain.cs
@@ -17,6 +17,25 @@ public abstract class CsProjNetToolchain(string name, Runtime runtime, DotNetCli
public override async IAsyncEnumerable ValidateAsync(BenchmarkCase benchmarkCase, IResolver resolver)
{
+ if (Runtime is MonoCoreRuntime or MonoWasmRuntime or MonoWasmAotRuntime)
+ {
+ Version? targetVersion = Runtime.Version;
+ if (settings.TargetFrameworkMoniker.IsNotBlank())
+ {
+ targetVersion = Environments.Runtime.TryParse(settings.TargetFrameworkMoniker, out var targetRuntime)
+ ? targetRuntime.Version
+ : null;
+ }
+
+ if (targetVersion is { Major: >= 12 })
+ {
+ yield return new ValidationError(true,
+ "Mono runtime packs are not available for .NET 12 and later. Select CoreCLR or an earlier target framework.",
+ benchmarkCase);
+ yield break;
+ }
+ }
+
await foreach (var validationError in base.ValidateAsync(benchmarkCase, resolver).ConfigureAwait(false))
{
yield return validationError;
diff --git a/src/BenchmarkDotNet/Toolchains/Mono/CsProjMonoCoreToolchain.cs b/src/BenchmarkDotNet/Toolchains/Mono/CsProjMonoCoreToolchain.cs
index 17d4e1c17d..5c3c68b91f 100644
--- a/src/BenchmarkDotNet/Toolchains/Mono/CsProjMonoCoreToolchain.cs
+++ b/src/BenchmarkDotNet/Toolchains/Mono/CsProjMonoCoreToolchain.cs
@@ -13,7 +13,6 @@ public sealed class CsProjMonoCoreToolchain : CsProjNetToolchain
public static readonly CsProjMonoCoreToolchain Mono90 = new(MonoCoreRuntime.Net90, MonoCoreSettings.Default);
public static readonly CsProjMonoCoreToolchain Mono10_0 = new(MonoCoreRuntime.Net10_0, MonoCoreSettings.Default);
public static readonly CsProjMonoCoreToolchain Mono11_0 = new(MonoCoreRuntime.Net11_0, MonoCoreSettings.Default);
- public static readonly CsProjMonoCoreToolchain Mono12_0 = new(MonoCoreRuntime.Net12_0, MonoCoreSettings.Default);
private CsProjMonoCoreToolchain(MonoCoreRuntime runtime, MonoCoreSettings settings)
: this(runtime, settings, Resolve(settings, runtime)) { }
@@ -44,7 +43,6 @@ public static CsProjMonoCoreToolchain From(MonoCoreRuntime runtime, MonoCoreSett
9 => Mono90,
10 => Mono10_0,
11 => Mono11_0,
- 12 => Mono12_0,
_ => new CsProjMonoCoreToolchain(runtime, settings),
};
}
diff --git a/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmAotToolchain.cs b/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmAotToolchain.cs
index 4da4b09865..83ad6e8558 100644
--- a/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmAotToolchain.cs
+++ b/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmAotToolchain.cs
@@ -9,7 +9,6 @@ public sealed class CsProjMonoWasmAotToolchain : CsProjWasmToolchain
public static readonly CsProjMonoWasmAotToolchain Net90 = new(MonoWasmAotRuntime.Net90, WasmSettings.Default);
public static readonly CsProjMonoWasmAotToolchain Net10_0 = new(MonoWasmAotRuntime.Net10_0, WasmSettings.Default);
public static readonly CsProjMonoWasmAotToolchain Net11_0 = new(MonoWasmAotRuntime.Net11_0, WasmSettings.Default);
- public static readonly CsProjMonoWasmAotToolchain Net12_0 = new(MonoWasmAotRuntime.Net12_0, WasmSettings.Default);
private CsProjMonoWasmAotToolchain(MonoWasmAotRuntime runtime, WasmSettings settings)
: base("MonoWasmAot", runtime, settings, aot: true, useCoreClrRuntime: false) { }
@@ -26,7 +25,6 @@ public static CsProjMonoWasmAotToolchain From(MonoWasmAotRuntime runtime, WasmSe
9 => Net90,
10 => Net10_0,
11 => Net11_0,
- 12 => Net12_0,
_ => new CsProjMonoWasmAotToolchain(runtime, settings),
};
}
diff --git a/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmToolchain.cs b/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmToolchain.cs
index 1663ee4fda..a33f2b521e 100644
--- a/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmToolchain.cs
+++ b/src/BenchmarkDotNet/Toolchains/Wasm/CsProjMonoWasmToolchain.cs
@@ -9,7 +9,6 @@ public sealed class CsProjMonoWasmToolchain : CsProjWasmToolchain
public static readonly CsProjMonoWasmToolchain Net90 = new(MonoWasmRuntime.Net90, WasmSettings.Default);
public static readonly CsProjMonoWasmToolchain Net10_0 = new(MonoWasmRuntime.Net10_0, WasmSettings.Default);
public static readonly CsProjMonoWasmToolchain Net11_0 = new(MonoWasmRuntime.Net11_0, WasmSettings.Default);
- public static readonly CsProjMonoWasmToolchain Net12_0 = new(MonoWasmRuntime.Net12_0, WasmSettings.Default);
private CsProjMonoWasmToolchain(MonoWasmRuntime runtime, WasmSettings settings)
: base("MonoWasm", runtime, settings, aot: false, useCoreClrRuntime: false) { }
@@ -26,7 +25,6 @@ public static CsProjMonoWasmToolchain From(MonoWasmRuntime runtime, WasmSettings
9 => Net90,
10 => Net10_0,
11 => Net11_0,
- 12 => Net12_0,
_ => new CsProjMonoWasmToolchain(runtime, settings),
};
}
diff --git a/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs b/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
index 8c3b350c8a..bfd2ecf593 100644
--- a/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
+++ b/tests/BenchmarkDotNet.Tests/ConfigParserTests.cs
@@ -400,10 +400,10 @@ public void WasmRuntimesResolveToTheirToolchains(string moniker, Type expectedTo
[Theory]
[InlineData(RuntimeMoniker.Net12_0, typeof(CsProjCoreToolchain))]
[InlineData(RuntimeMoniker.NativeAot12_0, typeof(CsProjNativeAotToolchain))]
- [InlineData(RuntimeMoniker.Mono12_0, typeof(CsProjMonoCoreToolchain))]
+ [InlineData("mono12.0", typeof(CsProjMonoCoreToolchain))]
[InlineData(RuntimeMoniker.R2R12_0, typeof(CsProjR2RToolchain))]
- [InlineData(RuntimeMoniker.MonoWasm12_0, typeof(CsProjMonoWasmToolchain))]
- [InlineData(RuntimeMoniker.MonoWasmAot12_0, typeof(CsProjMonoWasmAotToolchain))]
+ [InlineData("monowasm12.0", typeof(CsProjMonoWasmToolchain))]
+ [InlineData("monowasmaot12.0", typeof(CsProjMonoWasmAotToolchain))]
[InlineData("corewasm12.0", typeof(CsProjCoreWasmToolchain))]
public void Net12RuntimesResolveToTheirToolchains(string moniker, Type expectedToolchain)
{
diff --git a/tests/BenchmarkDotNet.Tests/RuntimeParseTests.cs b/tests/BenchmarkDotNet.Tests/RuntimeParseTests.cs
index 94dae4b64c..85f7c81d72 100644
--- a/tests/BenchmarkDotNet.Tests/RuntimeParseTests.cs
+++ b/tests/BenchmarkDotNet.Tests/RuntimeParseTests.cs
@@ -17,9 +17,9 @@ public class RuntimeParseTests
[InlineData("net10.0", typeof(CoreRuntime), 10, 0)]
[InlineData(RuntimeMoniker.Net12_0, typeof(CoreRuntime), 12, 0)]
[InlineData(RuntimeMoniker.NativeAot12_0, typeof(NativeAotRuntime), 12, 0)]
- [InlineData(RuntimeMoniker.Mono12_0, typeof(MonoCoreRuntime), 12, 0)]
- [InlineData(RuntimeMoniker.MonoWasm12_0, typeof(MonoWasmRuntime), 12, 0)]
- [InlineData(RuntimeMoniker.MonoWasmAot12_0, typeof(MonoWasmAotRuntime), 12, 0)]
+ [InlineData("mono12.0", typeof(MonoCoreRuntime), 12, 0)]
+ [InlineData("monowasm12.0", typeof(MonoWasmRuntime), 12, 0)]
+ [InlineData("monowasmAot12.0", typeof(MonoWasmAotRuntime), 12, 0)]
[InlineData(RuntimeMoniker.R2R12_0, typeof(R2RRuntime), 12, 0)]
[InlineData("corewasm12.0", typeof(CoreWasmRuntime), 12, 0)]
[InlineData("netcoreapp3.1", typeof(CoreRuntime), 3, 1)]
@@ -265,17 +265,11 @@ public void Net12RuntimesAndDefaultToolchainsUseCachedInstances()
{
Assert.Same(CoreRuntime.Core12_0, Runtime.Parse(RuntimeMoniker.Net12_0));
Assert.Same(NativeAotRuntime.Net12_0, Runtime.Parse(RuntimeMoniker.NativeAot12_0));
- Assert.Same(MonoCoreRuntime.Net12_0, Runtime.Parse(RuntimeMoniker.Mono12_0));
- Assert.Same(MonoWasmRuntime.Net12_0, Runtime.Parse(RuntimeMoniker.MonoWasm12_0));
- Assert.Same(MonoWasmAotRuntime.Net12_0, Runtime.Parse(RuntimeMoniker.MonoWasmAot12_0));
Assert.Same(R2RRuntime.Net12_0, Runtime.Parse(RuntimeMoniker.R2R12_0));
Assert.Same(CoreRuntime.Core12_0, CoreRuntime.Latest);
Assert.Same(CsProjCoreToolchain.NetCoreApp12_0, CsProjCoreToolchain.From(CoreRuntime.Core12_0, NetCoreAppSettings.Default));
Assert.Same(CsProjNativeAotToolchain.Net12_0, CsProjNativeAotToolchain.From(NativeAotRuntime.Net12_0, NativeAotSettings.Default));
- Assert.Same(CsProjMonoCoreToolchain.Mono12_0, CsProjMonoCoreToolchain.From(MonoCoreRuntime.Net12_0, MonoCoreSettings.Default));
- Assert.Same(CsProjMonoWasmToolchain.Net12_0, CsProjMonoWasmToolchain.From(MonoWasmRuntime.Net12_0, WasmSettings.Default));
- Assert.Same(CsProjMonoWasmAotToolchain.Net12_0, CsProjMonoWasmAotToolchain.From(MonoWasmAotRuntime.Net12_0, WasmSettings.Default));
Assert.Same(CsProjR2RToolchain.R2R12_0, CsProjR2RToolchain.From(R2RRuntime.Net12_0, R2RSettings.Default));
}