diff --git a/eng/testing/linker/project.csproj.template b/eng/testing/linker/project.csproj.template
index 41466e8d4492af..d31c8df9c9271e 100644
--- a/eng/testing/linker/project.csproj.template
+++ b/eng/testing/linker/project.csproj.template
@@ -75,6 +75,12 @@
{AdditionalProjectReferences}
+
+
+ <_BoolPropertiesThatTriggerRelinking Remove="InvariantGlobalization" />
+
+
+
diff --git a/src/mono/browser/build/BrowserWasmApp.targets b/src/mono/browser/build/BrowserWasmApp.targets
index 6174769ef02ea4..aa231c45d8b7cc 100644
--- a/src/mono/browser/build/BrowserWasmApp.targets
+++ b/src/mono/browser/build/BrowserWasmApp.targets
@@ -64,7 +64,6 @@
<_BoolPropertiesThatTriggerRelinking Include="WasmEnableSIMD" DefaultValueInRuntimePack="true" />
<_BoolPropertiesThatTriggerRelinking Include="WasmEnableExceptionHandling" DefaultValueInRuntimePack="true" />
- <_BoolPropertiesThatTriggerRelinking Include="WasmNativeStrip" DefaultValueInRuntimePack="true" />
diff --git a/src/mono/wasi/build/WasiApp.targets b/src/mono/wasi/build/WasiApp.targets
index b31c573ea349b5..b229d76dd71ff9 100644
--- a/src/mono/wasi/build/WasiApp.targets
+++ b/src/mono/wasi/build/WasiApp.targets
@@ -39,7 +39,6 @@
<_BoolPropertiesThatTriggerRelinking Include="WasmEnableSIMD" DefaultValueInRuntimePack="false" />
- <_BoolPropertiesThatTriggerRelinking Include="WasmNativeStrip" DefaultValueInRuntimePack="true" />
diff --git a/src/mono/wasm/Wasm.Build.Tests/NativeBuildTests.cs b/src/mono/wasm/Wasm.Build.Tests/NativeBuildTests.cs
index ac8b567761f36a..f7c7483a949d3f 100644
--- a/src/mono/wasm/Wasm.Build.Tests/NativeBuildTests.cs
+++ b/src/mono/wasm/Wasm.Build.Tests/NativeBuildTests.cs
@@ -93,5 +93,24 @@ public void IntermediateBitcodeToObjectFilesAreNotLLVMIR(BuildArgs buildArgs, st
+ " It might fail if it was incorrectly compiled to a bitcode file, instead of wasm.");
}
+ [Theory]
+ [BuildAndRun(host: RunHost.None, aot: true)]
+ public void NativeBuildIsRequired(BuildArgs buildArgs, string id)
+ {
+ string projectName = $"native_build_{buildArgs.Config}_{buildArgs.AOT}";
+
+ buildArgs = buildArgs with { ProjectName = projectName, ExtraBuildArgs = "-p:WasmBuildNative=false -p:WasmSingleFileBundle=true" };
+ buildArgs = ExpandBuildArgs(buildArgs);
+
+ (_, string output) = BuildProject(
+ buildArgs,
+ id: id,
+ new BuildProjectOptions(
+ InitProject: () => File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), s_mainReturns42),
+ DotnetWasmFromRuntimePack: false,
+ ExpectSuccess: false));
+
+ Assert.Contains("WasmBuildNative is required", output);
+ }
}
}
diff --git a/src/mono/wasm/build/WasmApp.Common.targets b/src/mono/wasm/build/WasmApp.Common.targets
index f0c0d4be6946ab..5393cfb84ba794 100644
--- a/src/mono/wasm/build/WasmApp.Common.targets
+++ b/src/mono/wasm/build/WasmApp.Common.targets
@@ -111,6 +111,13 @@
+
+ <_BoolPropertiesThatTriggerRelinking Include="InvariantTimezone" DefaultValueInRuntimePack="false" />
+ <_BoolPropertiesThatTriggerRelinking Include="InvariantGlobalization" DefaultValueInRuntimePack="false" />
+ <_BoolPropertiesThatTriggerRelinking Include="WasmNativeStrip" DefaultValueInRuntimePack="true" />
+ <_BoolPropertiesThatTriggerRelinking Include="WasmSingleFileBundle" DefaultValueInRuntimePack="false" />
+
+
$(PrepareInputsForWasmBuildDependsOn);
@@ -494,14 +501,18 @@
Text="$(_ToolchainMissingErrorMessage) SDK is required for AOT'ing assemblies." />
- <_BoolPropertiesThatTriggerRelinking Include="InvariantTimezone" DefaultValueInRuntimePack="false" />
- <_BoolPropertiesThatTriggerRelinking Include="InvariantGlobalization" DefaultValueInRuntimePack="false" />
+ <_ChangedBoolPropertiesThatTriggerRelinking Include="%(_BoolPropertiesThatTriggerRelinking.Identity)" Condition="'$(%(_BoolPropertiesThatTriggerRelinking.Identity))' != '' and
+ '$(%(_BoolPropertiesThatTriggerRelinking.Identity))' != '%(_BoolPropertiesThatTriggerRelinking.DefaultValueInRuntimePack)'" />
+
+ <_WasmBuildNativeRequired Condition="@(_ChangedBoolPropertiesThatTriggerRelinking->Count()) > 0">true
+
+
+
- true
+ true
@@ -510,7 +521,6 @@
true
true
- true
@@ -518,7 +528,6 @@
true
true
- true
false