From a1906405e184090e852e207d8128226ef57b93a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Tue, 14 Oct 2025 16:37:37 +0200 Subject: [PATCH 1/5] Expect fingerprint on dotnet.js for preloading --- .../build/Microsoft.NET.Sdk.WebAssembly.Browser.targets | 7 ++++++- 1 file changed, 6 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 b8c831e44c1516..06f9afe742e67f 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 @@ -514,8 +514,13 @@ Copyright (c) .NET Foundation. All rights reserved. + + <_WasmBootConfigFileNameWithoutExtension>$([System.IO.Path]::GetFileNameWithoutExtension('$(_WasmBootConfigFileName)')) + <_WasmBootConfigFileExtension>$([System.IO.Path]::GetExtension('$(_WasmBootConfigFileName)')) + - <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="'%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileName)'" /> + <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="'$(_WasmFingerprintBootConfig)' == 'true' and '%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileNameWithoutExtension).%(Fingerprint)$(_WasmBootConfigFileExtension)'" /> + <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="'$(_WasmFingerprintBootConfig)' != 'true' and '%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileName)'" /> Date: Wed, 15 Oct 2025 09:35:45 +0200 Subject: [PATCH 2/5] Update test to expect 0 or 1 preloading link in the output --- .../wasm/Wasm.Build.Tests/PreloadingTests.cs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs b/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs index 4703b7e4f99ef4..6fd1d5968f2b0c 100644 --- a/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; using System.IO; using System.Linq; using Xunit; @@ -33,7 +34,7 @@ public void PreloadAssets(bool isPublish, bool fingerprintDotnetJs) else BuildProject(info, config, new BuildOptions(ExtraMSBuildArgs: extraMSBuildArgs), wasmFingerprintDotnetJs: fingerprintDotnetJs); - string? indexHtmlPath = null; + string? indexHtmlPath; if (isPublish) { indexHtmlPath = Path.Combine( @@ -51,6 +52,7 @@ public void PreloadAssets(bool isPublish, bool fingerprintDotnetJs) Assert.True(File.Exists(indexHtmlPath)); string indexHtmlContent = File.ReadAllText(indexHtmlPath); + Assert.Equal(1, CountOccurrences(indexHtmlContent, "rel=\"preload\"")); if (fingerprintDotnetJs) { // Expect to find fingerprinted preload @@ -63,4 +65,21 @@ public void PreloadAssets(bool isPublish, bool fingerprintDotnetJs) Assert.Contains(" Date: Wed, 15 Oct 2025 12:09:01 +0000 Subject: [PATCH 3/5] More test cases --- .../wasm/Wasm.Build.Tests/PreloadingTests.cs | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs b/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs index 6fd1d5968f2b0c..65cc049cc10fa8 100644 --- a/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/PreloadingTests.cs @@ -19,16 +19,20 @@ public PreloadingTests(ITestOutputHelper output, SharedBuildPerTestClassFixture } [Theory] - [InlineData(false, false)] - [InlineData(false, true)] - [InlineData(true, false)] - [InlineData(true, true)] - public void PreloadAssets(bool isPublish, bool fingerprintDotnetJs) + [InlineData(false, false, false)] + [InlineData(false, false, true)] + [InlineData(false, true, false)] + [InlineData(false, true, true)] + [InlineData(true, false, false)] + [InlineData(true, false, true)] + [InlineData(true, true, false)] + [InlineData(true, true, true)] + public void PreloadAssets(bool isPublish, bool fingerprintDotnetJs, bool preloadAssets) { Configuration config = Configuration.Debug; ProjectInfo info = CopyTestAsset(config, aot: false, TestAsset.WasmBasicTestApp, "PreloadAssets"); - string extraMSBuildArgs = $"-p:WasmFingerprintDotnetJs={fingerprintDotnetJs}"; + string extraMSBuildArgs = $"-p:WasmFingerprintDotnetJs={fingerprintDotnetJs.ToString().ToLower()} -p:WasmPreloadAssets={preloadAssets.ToString().ToLower()}"; if (isPublish) PublishProject(info, config, new PublishOptions(ExtraMSBuildArgs: extraMSBuildArgs), wasmFingerprintDotnetJs: fingerprintDotnetJs); else @@ -52,17 +56,20 @@ public void PreloadAssets(bool isPublish, bool fingerprintDotnetJs) Assert.True(File.Exists(indexHtmlPath)); string indexHtmlContent = File.ReadAllText(indexHtmlPath); - Assert.Equal(1, CountOccurrences(indexHtmlContent, "rel=\"preload\"")); - if (fingerprintDotnetJs) + Assert.Equal(preloadAssets ? 1 : 0, CountOccurrences(indexHtmlContent, "rel=\"preload\"")); + if (preloadAssets) { - // Expect to find fingerprinted preload - Assert.Contains(" Date: Wed, 15 Oct 2025 12:10:11 +0000 Subject: [PATCH 4/5] Use newer SDK for WBT --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 400570557183f7..817b66dc70a1dd 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -162,7 +162,7 @@ 3.1.7 1.0.406601 - $(MicrosoftDotNetApiCompatTaskVersion) + 10.0.100-rtm.25508.107 10.0.0-preview.7.25359.101 $(runtimewinx64MicrosoftNETCoreRuntimeWasmNodeTransportPackageVersion) From 9bdc4468af4639aa2dab632026def1eadd97ed21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Fri, 17 Oct 2025 13:30:18 +0200 Subject: [PATCH 5/5] Update the condition for switch between non-FP asset name and FP asset name --- .../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 06f9afe742e67f..ef3a27f424f8aa 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 @@ -519,8 +519,8 @@ Copyright (c) .NET Foundation. All rights reserved. <_WasmBootConfigFileExtension>$([System.IO.Path]::GetExtension('$(_WasmBootConfigFileName)')) - <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="'$(_WasmFingerprintBootConfig)' == 'true' and '%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileNameWithoutExtension).%(Fingerprint)$(_WasmBootConfigFileExtension)'" /> - <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="'$(_WasmFingerprintBootConfig)' != 'true' and '%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileName)'" /> + <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="'$(_WasmFingerprintAssets)' == 'true' and '$(_WasmFingerprintBootConfig)' == 'true' and '%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileNameWithoutExtension).%(Fingerprint)$(_WasmBootConfigFileExtension)'" /> + <_WasmPreloadBuildScriptAsset Include="@(StaticWebAsset)" Condition="('$(_WasmFingerprintAssets)' != 'true' or '$(_WasmFingerprintBootConfig)' != 'true') and '%(AssetKind)' != 'Publish' and '%(FileName)%(Extension)' == '$(_WasmBootConfigFileName)'" />