From 2512418fca254434c3477191b4c177ba1e004388 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 4 Mar 2026 22:02:54 +0100 Subject: [PATCH 01/22] disable wasmhotreload if not explicitly set and bundlerfriendlybootconfig true --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 30970d18aa4eb9..00942465ce91dc 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -231,7 +231,8 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmBundlerFriendlyBootConfig>$(WasmBundlerFriendlyBootConfig) <_WasmBundlerFriendlyBootConfig Condition="'$(_WasmBundlerFriendlyBootConfig)' == ''">false - + false + $(OutputPath)$(PublishDirName)\ From 3b65b198b2eaec9557ae19d274756e95e4aad6cb Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 4 Mar 2026 22:03:36 +0100 Subject: [PATCH 02/22] casing --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 00942465ce91dc..a8e7e8e21805e9 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -231,7 +231,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmBundlerFriendlyBootConfig>$(WasmBundlerFriendlyBootConfig) <_WasmBundlerFriendlyBootConfig Condition="'$(_WasmBundlerFriendlyBootConfig)' == ''">false - false + false $(OutputPath)$(PublishDirName)\ From 2f96dcb6df302337821707e3201824cb869ba767 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Fri, 6 Mar 2026 23:45:21 +0100 Subject: [PATCH 03/22] add build test no hotreload in bootjson --- .../Blazor/BlazorWasmTestBase.cs | 2 +- .../LibraryInitializerTests.cs | 20 ++++++++++++++++++- .../Templates/WasmTemplateTestsBase.cs | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs index 1f4340260087d1..b657555aaefb91 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs @@ -18,7 +18,7 @@ namespace Wasm.Build.Tests; public abstract class BlazorWasmTestBase : WasmTemplateTestsBase { - protected readonly WasmSdkBasedProjectProvider _provider; + protected new readonly WasmSdkBasedProjectProvider _provider; private readonly string _blazorExtraMSBuildArgs = "/warnaserror"; protected readonly PublishOptions _defaultBlazorPublishOptions; private readonly BuildOptions _defaultBlazorBuildOptions; diff --git a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs index f6cfb18468a370..56a597ef9721be 100644 --- a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs @@ -9,7 +9,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; -using Microsoft.Playwright; +using Microsoft.NET.Sdk.WebAssembly; using Xunit.Abstractions; using Xunit; @@ -55,4 +55,22 @@ public async Task AbortStartupOnError() RunResult result = await RunForPublishWithWebServer(options); Assert.True(result.ConsoleOutput.Any(m => AbortStartupOnErrorRegex.IsMatch(m)), "The library initializer test didn't emit expected error message"); } + + [Fact] + [TestCategory("bundler-friendly")] + public void BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer() + { + Configuration config = Configuration.Debug; + ProjectInfo info = CopyTestAsset(config, aot: true, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); + + BuildProject(info, config); + + // bin/{config}/{targetframework}/wwwroot/_framework/dotnet.js + string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); + BootJsonData bootJson = _provider.GetBootJson(bootConfigPath); + + Assert.DoesNotContain(((AssetsData)bootJson.resources).libraryInitializers, f => f.name.Contains("Microsoft.DotNet.HotReload.WebAssembly.Browser")); + Assert.DoesNotContain(((AssetsData)bootJson.resources).modulesAfterConfigLoaded, f => f.name.Contains("Microsoft.DotNet.HotReload.WebAssembly.Browser")); + Assert.DoesNotContain(((AssetsData)bootJson.resources).assembly, f => f.name.Contains("Microsoft.DotNet.HotReload.WebAssembly.Browser")); + } } diff --git a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs index 820e4464de9eab..2d5ee93c6658f3 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs @@ -20,9 +20,9 @@ namespace Wasm.Build.Tests; public class WasmTemplateTestsBase : BuildTestBase { - private readonly WasmSdkBasedProjectProvider _provider; private readonly string _extraBuildArgsBuild = "-p:WasmEnableHotReload=false"; private readonly string _extraBuildArgsPublish = "-p:CompressionEnabled=false -p:WasmEnableHotReload=false"; + protected readonly WasmSdkBasedProjectProvider _provider; protected readonly PublishOptions _defaultPublishOptions; protected readonly BuildOptions _defaultBuildOptions; protected const string DefaultRuntimeAssetsRelativePath = "./_framework/"; From f809af2b3702bcb4587e0b987bc31c135550b3ac Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Sat, 7 Mar 2026 00:38:47 +0100 Subject: [PATCH 04/22] aot is not relevant here --- src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs index 56a597ef9721be..04a98327c4b091 100644 --- a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs @@ -61,7 +61,7 @@ public async Task AbortStartupOnError() public void BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer() { Configuration config = Configuration.Debug; - ProjectInfo info = CopyTestAsset(config, aot: true, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); + ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); BuildProject(info, config); From 43d8563247fc964ee799b90f69136319348c3fb1 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Sat, 7 Mar 2026 00:44:43 +0100 Subject: [PATCH 05/22] pass explicitly no build props --- src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs index 04a98327c4b091..b54c0f630df288 100644 --- a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs @@ -63,7 +63,7 @@ public void BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer() Configuration config = Configuration.Debug; ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); - BuildProject(info, config); + BuildProject(info, config, new BuildOptions()); // bin/{config}/{targetframework}/wwwroot/_framework/dotnet.js string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); From 862aeb3e78f25209039af2c2d4573147c5650844 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 22:50:06 +0100 Subject: [PATCH 06/22] disable compression, hotreload and fingerprinting when bundlerfriendly --- .../Microsoft.NET.Sdk.WebAssembly.Browser.targets | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index a8e7e8e21805e9..1995d9bf9a8c35 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -85,6 +85,8 @@ Copyright (c) .NET Foundation. All rights reserved. false _GatherWasmFilesToPublish;$(WasmNestedPublishAppDependsOn) <_WasmNestedPublishAppPreTarget>ComputeFilesToPublish + + false @@ -92,6 +94,12 @@ Copyright (c) .NET Foundation. All rights reserved. + + + + + + @@ -184,7 +192,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + <_BlazorCacheBootResources>$(BlazorCacheBootResources) <_BlazorCacheBootResources Condition="'$(_BlazorCacheBootResources)' == '' and '$(_TargetingNET100OrLater)' != 'true'">true @@ -231,8 +239,9 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmBundlerFriendlyBootConfig>$(WasmBundlerFriendlyBootConfig) <_WasmBundlerFriendlyBootConfig Condition="'$(_WasmBundlerFriendlyBootConfig)' == ''">false - false - + <_WasmFingerprintAssets Condition="'$(_WasmBundlerFriendlyBootConfig)' == 'true'">false + <_WasmEnableHotReload Condition="'$(_WasmBundlerFriendlyBootConfig)' == 'true'">false + $(OutputPath)$(PublishDirName)\ From d01a0741cac22e3a4028222666ba472274098426 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 22:50:53 +0100 Subject: [PATCH 07/22] update test to work --- .../Wasm.Build.Tests/LibraryInitializerTests.cs | 14 +++++--------- .../Templates/WasmTemplateTestsBase.cs | 9 ++++----- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs index b54c0f630df288..9e535d6cb13b15 100644 --- a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs @@ -62,15 +62,11 @@ public void BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer() { Configuration config = Configuration.Debug; ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); - - BuildProject(info, config, new BuildOptions()); - - // bin/{config}/{targetframework}/wwwroot/_framework/dotnet.js + // project exists and contains true + BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); - BootJsonData bootJson = _provider.GetBootJson(bootConfigPath); - - Assert.DoesNotContain(((AssetsData)bootJson.resources).libraryInitializers, f => f.name.Contains("Microsoft.DotNet.HotReload.WebAssembly.Browser")); - Assert.DoesNotContain(((AssetsData)bootJson.resources).modulesAfterConfigLoaded, f => f.name.Contains("Microsoft.DotNet.HotReload.WebAssembly.Browser")); - Assert.DoesNotContain(((AssetsData)bootJson.resources).assembly, f => f.name.Contains("Microsoft.DotNet.HotReload.WebAssembly.Browser")); + string bootJSObject = ProjectProviderBase.GetBootJsonContent(bootConfigPath); + // Bundler-friendly doesnt product json, its technically a js object literal. It cannot be json parsed can be checked if not contains hot reload. + Assert.DoesNotContain("Microsoft.DotNet.HotReload.WebAssembly.Browser", bootJSObject); } } diff --git a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs index 2d5ee93c6658f3..787669cd1f1a14 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs @@ -119,8 +119,6 @@ protected ProjectInfo CopyTestAsset( extraProperties += """ true - false - false """; } @@ -190,9 +188,10 @@ public virtual (string projectDir, string buildOutput) PublishProject( public virtual (string projectDir, string buildOutput) BuildProject( ProjectInfo info, Configuration configuration, + bool noDefaultOptions = false, bool? isNativeBuild = null, bool? wasmFingerprintDotnetJs = null) => // null for unset properties - BuildProjectCore(info, configuration, _defaultBuildOptions, isNativeBuild, wasmFingerprintDotnetJs); + BuildProjectCore(info, configuration, noDefaultOptions ? new BuildOptions() : _defaultBuildOptions, isNativeBuild, wasmFingerprintDotnetJs); public virtual (string projectDir, string buildOutput) BuildProject( ProjectInfo info, @@ -242,9 +241,9 @@ public virtual (string projectDir, string buildOutput) BuildProject( return (_projectDir, res.Output); } - if (EnvironmentVariables.UseJavascriptBundler && buildOptions.IsPublish) + if (EnvironmentVariables.UseJavascriptBundler) { - string publicWwwrootDir = Path.GetFullPath(Path.Combine(GetBinFrameworkDir(configuration, forPublish: true), "..")); + string publicWwwrootDir = Path.GetFullPath(Path.Combine(GetBinFrameworkDir(configuration, forPublish: buildOptions.IsPublish), "..")); File.Copy(Path.Combine(BuildEnvironment.TestAssetsPath, "JavascriptBundlers", "package.json"), Path.Combine(publicWwwrootDir, "package.json")); File.Copy(Path.Combine(BuildEnvironment.TestAssetsPath, "JavascriptBundlers", "rollup.config.mjs"), Path.Combine(publicWwwrootDir, "rollup.config.mjs")); From 23435bca9b8b717ed237ff04eecf2b29c7a5973d Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 22:51:30 +0100 Subject: [PATCH 08/22] allow pdbs as file in rollup --- src/mono/wasm/testassets/JavascriptBundlers/rollup.config.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mono/wasm/testassets/JavascriptBundlers/rollup.config.mjs b/src/mono/wasm/testassets/JavascriptBundlers/rollup.config.mjs index f9ba590ed0b4b2..de79658c228003 100644 --- a/src/mono/wasm/testassets/JavascriptBundlers/rollup.config.mjs +++ b/src/mono/wasm/testassets/JavascriptBundlers/rollup.config.mjs @@ -13,7 +13,7 @@ export default { plugins: [ files({ output: 'public', - extensions: /\.(wasm|dat)$/, + extensions: /\.(wasm|dat|pdb)$/, hash: true, }), files({ @@ -39,4 +39,4 @@ export default { 'process.env.NODE_ENV': '"production"' }), ] -} \ No newline at end of file +} From db997e1db50894efb7cba1ce2e54a02196cf9d4d Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 23:14:16 +0100 Subject: [PATCH 09/22] more appropriate test location --- src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs | 14 ++++++++++++++ .../Wasm.Build.Tests/LibraryInitializerTests.cs | 14 -------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs index 47d1bc3c0426bf..5517117a9e6eed 100644 --- a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs @@ -112,4 +112,18 @@ public async Task PublishWithDefaultLevelAndPdbs(Configuration configuration) RunResult result = await RunForPublishWithWebServer(options); AssertDebugLevel(result.TestOutput, -1); } + + [Fact] + [TestCategory("bundler-friendly")] + public void BundlerFriendlyBuildProvidesValidOutputForNpmBuild() + { + Configuration config = Configuration.Debug; + ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); + // project exists and contains true + BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); // automatically runs npm build + string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); + string bootJSObject = ProjectProviderBase.GetBootJsonContent(bootConfigPath); + // Bundler-friendly doesnt product json, its technically a js object literal. It cannot be json parsed can be checked if not contains hot reload. + Assert.DoesNotContain("Microsoft.DotNet.HotReload.WebAssembly.Browser", bootJSObject); + } } diff --git a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs index ccb3fba6c80e6b..301984407b8c1f 100644 --- a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs @@ -64,18 +64,4 @@ public async Task AbortStartupOnError() result.ConsoleOutput.Any(m => expectedRegex.IsMatch(m)), $"The library initializer test didn't emit expected error message.\nConsole output:\n{string.Join("\n", result.ConsoleOutput)}"); } - - [Fact] - [TestCategory("bundler-friendly")] - public void BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer() - { - Configuration config = Configuration.Debug; - ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); - // project exists and contains true - BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); - string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); - string bootJSObject = ProjectProviderBase.GetBootJsonContent(bootConfigPath); - // Bundler-friendly doesnt product json, its technically a js object literal. It cannot be json parsed can be checked if not contains hot reload. - Assert.DoesNotContain("Microsoft.DotNet.HotReload.WebAssembly.Browser", bootJSObject); - } } From 9d455f89cef5773eccda4ebd5dbb55ed8645c65c Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 23:16:58 +0100 Subject: [PATCH 10/22] unused import --- src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs index 301984407b8c1f..809f41e8fca6ed 100644 --- a/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/LibraryInitializerTests.cs @@ -9,7 +9,6 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; -using Microsoft.NET.Sdk.WebAssembly; using Xunit.Abstractions; using Xunit; From 558f778b183332621513fcdadd62e9b9468983e8 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 23:17:51 +0100 Subject: [PATCH 11/22] spelling/grammar --- src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs index 5517117a9e6eed..01520d85364ccd 100644 --- a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs @@ -119,11 +119,11 @@ public void BundlerFriendlyBuildProvidesValidOutputForNpmBuild() { Configuration config = Configuration.Debug; ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); - // project exists and contains true - BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); // automatically runs npm build + // Project exists and contains true. + BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); string bootJSObject = ProjectProviderBase.GetBootJsonContent(bootConfigPath); - // Bundler-friendly doesnt product json, its technically a js object literal. It cannot be json parsed can be checked if not contains hot reload. + // Bundler-friendly doesn't produce JSON; it's technically a JS object literal. It cannot be JSON-parsed but can be checked to ensure it does not contain hot reload. Assert.DoesNotContain("Microsoft.DotNet.HotReload.WebAssembly.Browser", bootJSObject); } } From f2764ef92c1117696959a15bcc5514f13986614f Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Tue, 10 Mar 2026 23:37:10 +0100 Subject: [PATCH 12/22] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 2 +- src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 1995d9bf9a8c35..c08cc52958350f 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -86,7 +86,7 @@ Copyright (c) .NET Foundation. All rights reserved. _GatherWasmFilesToPublish;$(WasmNestedPublishAppDependsOn) <_WasmNestedPublishAppPreTarget>ComputeFilesToPublish - false + false diff --git a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs index 01520d85364ccd..4b9fe8cf3bce9f 100644 --- a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs @@ -118,12 +118,12 @@ public async Task PublishWithDefaultLevelAndPdbs(Configuration configuration) public void BundlerFriendlyBuildProvidesValidOutputForNpmBuild() { Configuration config = Configuration.Debug; - ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "LibraryInitializerTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); + ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "DebugLevelTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); // Project exists and contains true. BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); string bootJSObject = ProjectProviderBase.GetBootJsonContent(bootConfigPath); - // Bundler-friendly doesn't produce JSON; it's technically a JS object literal. It cannot be JSON-parsed but can be checked to ensure it does not contain hot reload. + // The bundler-friendly boot config is emitted as a JavaScript object literal, not JSON, so it cannot be parsed as JSON. It can still be inspected to ensure it does not contain hot reload. Assert.DoesNotContain("Microsoft.DotNet.HotReload.WebAssembly.Browser", bootJSObject); } } From 18c7d4fae13580f3bc78f903557b21ca843c7fb3 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 11 Mar 2026 17:27:11 +0100 Subject: [PATCH 13/22] =?UTF-8?q?=EF=BB=BFdont=20change=20targets=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index c08cc52958350f..e301dd7673e23b 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -86,7 +86,8 @@ Copyright (c) .NET Foundation. All rights reserved. _GatherWasmFilesToPublish;$(WasmNestedPublishAppDependsOn) <_WasmNestedPublishAppPreTarget>ComputeFilesToPublish - false + false + false @@ -192,7 +193,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + <_BlazorCacheBootResources>$(BlazorCacheBootResources) <_BlazorCacheBootResources Condition="'$(_BlazorCacheBootResources)' == '' and '$(_TargetingNET100OrLater)' != 'true'">true @@ -218,6 +219,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmInlineBootConfig Condition="'$(_WasmInlineBootConfig)' == ''">false <_WasmFingerprintAssets>$(WasmFingerprintAssets) + <_WasmFingerprintAssets Condition="'$(_WasmBundlerFriendlyBootConfig)' == 'true'">false <_WasmFingerprintAssets Condition="'$(_WasmFingerprintAssets)' == '' and '$(_TargetingNET90OrLater)' == 'true'">true <_WasmFingerprintAssets Condition="'$(_WasmFingerprintAssets)' == ''">false @@ -239,8 +241,6 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmBundlerFriendlyBootConfig>$(WasmBundlerFriendlyBootConfig) <_WasmBundlerFriendlyBootConfig Condition="'$(_WasmBundlerFriendlyBootConfig)' == ''">false - <_WasmFingerprintAssets Condition="'$(_WasmBundlerFriendlyBootConfig)' == 'true'">false - <_WasmEnableHotReload Condition="'$(_WasmBundlerFriendlyBootConfig)' == 'true'">false $(OutputPath)$(PublishDirName)\ From a6c0da237f45f986b30756a84bf1394c8e4d8e7c Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 11 Mar 2026 17:28:53 +0100 Subject: [PATCH 14/22] allow enabling compression --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index e301dd7673e23b..aee922231028f9 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -86,7 +86,7 @@ Copyright (c) .NET Foundation. All rights reserved. _GatherWasmFilesToPublish;$(WasmNestedPublishAppDependsOn) <_WasmNestedPublishAppPreTarget>ComputeFilesToPublish - false + false false From dab4b6b89499f22f850ef1991a97f9f25e1a244f Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 11 Mar 2026 19:37:32 +0100 Subject: [PATCH 15/22] target the underscore property --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index aee922231028f9..239172866632b6 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -87,7 +87,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmNestedPublishAppPreTarget>ComputeFilesToPublish false - false + <_WasmEnableHotReload Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true'">false From ba4e6648348056eb94d9a1c6df28734c05c86d22 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 11 Mar 2026 20:48:39 +0100 Subject: [PATCH 16/22] dont include content, update staticwebassets to get copied to outdir --- ...Microsoft.NET.Sdk.WebAssembly.Browser.targets | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 239172866632b6..fa5a24f625fa0b 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -95,12 +95,6 @@ Copyright (c) .NET Foundation. All rights reserved. - - - - - - @@ -671,6 +665,16 @@ Copyright (c) .NET Foundation. All rights reserved. + + + + PreserveNewest + + + + From 247615c6ae8b572acc8afcb07d7ae31c9e76b1d9 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Wed, 11 Mar 2026 23:27:35 +0100 Subject: [PATCH 17/22] change order, ensure fingerprint and compression remain disabled --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index fa5a24f625fa0b..723015361b4126 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -62,6 +62,7 @@ Copyright (c) .NET Foundation. All rights reserved. $(CompressionIncludePatterns);_framework\** + true @@ -86,7 +87,6 @@ Copyright (c) .NET Foundation. All rights reserved. _GatherWasmFilesToPublish;$(WasmNestedPublishAppDependsOn) <_WasmNestedPublishAppPreTarget>ComputeFilesToPublish - false <_WasmEnableHotReload Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true'">false @@ -213,11 +213,12 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmInlineBootConfig Condition="'$(_WasmInlineBootConfig)' == ''">false <_WasmFingerprintAssets>$(WasmFingerprintAssets) - <_WasmFingerprintAssets Condition="'$(_WasmBundlerFriendlyBootConfig)' == 'true'">false + <_WasmFingerprintAssets Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true'">false <_WasmFingerprintAssets Condition="'$(_WasmFingerprintAssets)' == '' and '$(_TargetingNET90OrLater)' == 'true'">true <_WasmFingerprintAssets Condition="'$(_WasmFingerprintAssets)' == ''">false <_WasmFingerprintDotnetJs>$(WasmFingerprintDotnetJs) + <_WasmFingerprintDotnetJs Condition="'$(WasmBundlerFriendlyBootConfig)' == ''">false <_WasmFingerprintDotnetJs Condition="'$(_WasmFingerprintDotnetJs)' == ''">$(OverrideHtmlAssetPlaceholders) <_WasmFingerprintDotnetJs Condition="'$(_WasmFingerprintDotnetJs)' == ''">false <_WasmBootConfigFileName>$(WasmBootConfigFileName) @@ -666,7 +667,7 @@ Copyright (c) .NET Foundation. All rights reserved. From 1c1f5b56f9334824e20a8a579056daf0b6f2989b Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Thu, 12 Mar 2026 21:48:34 +0100 Subject: [PATCH 18/22] bundler friendly builds treat assets as they are during publish --- ...rosoft.NET.Sdk.WebAssembly.Browser.targets | 36 ++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 723015361b4126..73d58ac984133d 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -666,16 +666,44 @@ Copyright (c) .NET Foundation. All rights reserved. - + Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true' and '$(IsPublishing)' != 'true'"> + - - PreserveNewest + + + %(StaticWebAsset.CopyToPublishDirectory) + + + + + + + + + + + + <_BuildStaticWebAssetsCopyAlways Include="@(_StaticWebAssetsToCopyTargetPath)" Condition="'%(CopyToOutputDirectory)' == 'Always'" /> + <_BuildStaticWebAssetsPreserveNewest Include="@(_StaticWebAssetsToCopyTargetPath)" Condition="'%(CopyToOutputDirectory)' == 'PreserveNewest'" /> + <_BuildStaticWebAssetsIfDifferent Include="@(_StaticWebAssetsToCopyTargetPath)" Condition="'%(CopyToOutputDirectory)' == 'IfDifferent'" /> + + + From ba717c2ab544409dd908daebf20b199b0baa54e6 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Thu, 12 Mar 2026 21:51:47 +0100 Subject: [PATCH 19/22] refactor private field + public method --- src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs | 2 +- src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs | 2 +- .../wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs index b657555aaefb91..1f4340260087d1 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs @@ -18,7 +18,7 @@ namespace Wasm.Build.Tests; public abstract class BlazorWasmTestBase : WasmTemplateTestsBase { - protected new readonly WasmSdkBasedProjectProvider _provider; + protected readonly WasmSdkBasedProjectProvider _provider; private readonly string _blazorExtraMSBuildArgs = "/warnaserror"; protected readonly PublishOptions _defaultBlazorPublishOptions; private readonly BuildOptions _defaultBlazorBuildOptions; diff --git a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs index 4b9fe8cf3bce9f..6fb6b2dd44afd8 100644 --- a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs @@ -121,7 +121,7 @@ public void BundlerFriendlyBuildProvidesValidOutputForNpmBuild() ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "DebugLevelTests_BundlerFriendlyBootConfigHasNoHotReloadLibraryInitializer"); // Project exists and contains true. BuildProject(info, config, noDefaultOptions: true, wasmFingerprintDotnetJs: false); - string bootConfigPath = _provider.GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); + string bootConfigPath = GetBootConfigPath(GetBinFrameworkDir(config, forPublish: false)); string bootJSObject = ProjectProviderBase.GetBootJsonContent(bootConfigPath); // The bundler-friendly boot config is emitted as a JavaScript object literal, not JSON, so it cannot be parsed as JSON. It can still be inspected to ensure it does not contain hot reload. Assert.DoesNotContain("Microsoft.DotNet.HotReload.WebAssembly.Browser", bootJSObject); diff --git a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs index f95817c2d4b84d..45ba5220a5c87a 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTestsBase.cs @@ -22,7 +22,7 @@ public class WasmTemplateTestsBase : BuildTestBase { private readonly string _extraBuildArgsBuild = "-p:WasmEnableHotReload=false"; private readonly string _extraBuildArgsPublish = "-p:CompressionEnabled=false -p:WasmEnableHotReload=false"; - protected readonly WasmSdkBasedProjectProvider _provider; + private readonly WasmSdkBasedProjectProvider _provider; protected readonly PublishOptions _defaultPublishOptions; protected readonly BuildOptions _defaultBuildOptions; protected const string DefaultRuntimeAssetsRelativePath = "./_framework/"; @@ -484,6 +484,9 @@ void OnErrorMessage(string msg) } } + public string GetBootConfigPath(string binFrameworkDir, string? bootConfigFileName = null) => + _provider.GetBootConfigPath(binFrameworkDir, bootConfigFileName); + public string GetBinFrameworkDir(Configuration config, bool forPublish, string? framework = null, string? projectDir = null) => _provider.GetBinFrameworkDir(config, forPublish, framework ?? DefaultTargetFramework, projectDir); From 0ce730cb9888949f7a03ec562610a0b51a6f2ad9 Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Thu, 12 Mar 2026 22:28:30 +0100 Subject: [PATCH 20/22] add update attribute --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 73d58ac984133d..2d1d0aa983d435 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -672,8 +672,7 @@ Copyright (c) .NET Foundation. All rights reserved. - - + %(StaticWebAsset.CopyToPublishDirectory) From faf2368d37cf98671b0cd9584b3475bdfe1d028a Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Fri, 13 Mar 2026 15:21:48 +0100 Subject: [PATCH 21/22] fix bad condition causing unwanted fingerprint disabling --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets index 2d1d0aa983d435..e27f90693ea004 100644 --- a/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets +++ b/src/mono/nuget/Microsoft.NET.Sdk.WebAssembly.Pack/build/Microsoft.NET.Sdk.WebAssembly.Browser.targets @@ -218,7 +218,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmFingerprintAssets Condition="'$(_WasmFingerprintAssets)' == ''">false <_WasmFingerprintDotnetJs>$(WasmFingerprintDotnetJs) - <_WasmFingerprintDotnetJs Condition="'$(WasmBundlerFriendlyBootConfig)' == ''">false + <_WasmFingerprintDotnetJs Condition="'$(WasmBundlerFriendlyBootConfig)' == 'true'">false <_WasmFingerprintDotnetJs Condition="'$(_WasmFingerprintDotnetJs)' == ''">$(OverrideHtmlAssetPlaceholders) <_WasmFingerprintDotnetJs Condition="'$(_WasmFingerprintDotnetJs)' == ''">false <_WasmBootConfigFileName>$(WasmBootConfigFileName) @@ -669,7 +669,7 @@ Copyright (c) .NET Foundation. All rights reserved. - From ecd01f0b594783ba0376651ce65b31d432ee35fd Mon Sep 17 00:00:00 2001 From: Marc Zwart Date: Fri, 13 Mar 2026 17:48:43 +0100 Subject: [PATCH 22/22] only run test when building bundler-friendly --- src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs | 1 + src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs index 4e993991471be5..49c69733e88a1a 100644 --- a/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs @@ -66,6 +66,7 @@ public abstract class BuildTestBase : IClassFixture s_buildEnv.IsMonoRuntime; public static bool IsCoreClrRuntime => s_buildEnv.IsCoreClrRuntime; public static bool UseWebcil => s_buildEnv.UseWebcil; + public static bool UseJavascriptBundler => EnvironmentVariables.UseJavascriptBundler; public static string GetNuGetConfigPath() => Path.Combine(BuildEnvironment.TestDataPath, "nuget.config"); diff --git a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs index 6fb6b2dd44afd8..d07d2864bdc671 100644 --- a/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/DebugLevelTests.cs @@ -113,8 +113,7 @@ public async Task PublishWithDefaultLevelAndPdbs(Configuration configuration) AssertDebugLevel(result.TestOutput, -1); } - [Fact] - [TestCategory("bundler-friendly")] + [ConditionalFact(typeof(BuildTestBase), nameof(UseJavascriptBundler)), TestCategory("bundler-friendly")] public void BundlerFriendlyBuildProvidesValidOutputForNpmBuild() { Configuration config = Configuration.Debug;