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)); }