Skip to content
2 changes: 2 additions & 0 deletions src/mono/browser/runtime/loader/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,7 @@ const legacyEntrypoint = createEmscripten;

verifyEnvironment();

(dotnet.withConfig as Function)(/*! dotnetBootConfig */);

export { dotnet, exit };
export default legacyEntrypoint;
4 changes: 3 additions & 1 deletion src/mono/browser/runtime/loader/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,9 @@ export class HostBuilder implements DotnetHostBuilder {

withConfig (config: MonoConfig): DotnetHostBuilder {
try {
deep_merge_config(monoConfig, config);
if (config) {
deep_merge_config(monoConfig, config);
}
return this;
} catch (err) {
mono_exit(1, err);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,9 @@ Copyright (c) .NET Foundation. All rights reserved.
<_BlazorWebAssemblyStartupMemoryCache>$(BlazorWebAssemblyStartupMemoryCache)</_BlazorWebAssemblyStartupMemoryCache>
<_BlazorWebAssemblyJiterpreter>$(BlazorWebAssemblyJiterpreter)</_BlazorWebAssemblyJiterpreter>
<_BlazorWebAssemblyRuntimeOptions>$(BlazorWebAssemblyRuntimeOptions)</_BlazorWebAssemblyRuntimeOptions>
<_WasmInlineBootConfig>$(WasmInlineBootConfig)</_WasmInlineBootConfig>
<_WasmInlineBootConfig Condition="'$(_WasmInlineBootConfig)' == '' and '$(_TargetingNET100OrLater)' == 'true'">true</_WasmInlineBootConfig>
<_WasmInlineBootConfig Condition="'$(_WasmInlineBootConfig)' == ''">false</_WasmInlineBootConfig>
<!-- true = wasm assets will have hard fingerprint; false = wasm assets won't have even soft fingerprint -->
<_WasmFingerprintAssets>$(WasmFingerprintAssets)</_WasmFingerprintAssets>
<_WasmFingerprintAssets Condition="'$(_WasmFingerprintAssets)' == '' and '$(_TargetingNET90OrLater)' == 'true'">true</_WasmFingerprintAssets>
Expand All @@ -197,10 +200,12 @@ Copyright (c) .NET Foundation. All rights reserved.
<_WasmFingerprintDotnetJs Condition="'$(_WasmFingerprintDotnetJs)' == ''">$(OverrideHtmlAssetPlaceholders)</_WasmFingerprintDotnetJs>
<_WasmFingerprintDotnetJs Condition="'$(_WasmFingerprintDotnetJs)' == ''">false</_WasmFingerprintDotnetJs>
<!-- true = boot config will have hard fingerprint; false = boot config will have soft fingerprint -->
<_WasmFingerprintBootConfig>$(WasmFingerprintBootConfig)</_WasmFingerprintBootConfig>
<_WasmFingerprintBootConfig Condition="'$(_WasmInlineBootConfig)' == 'true'">$(_WasmFingerprintDotnetJs)</_WasmFingerprintBootConfig>
<_WasmFingerprintBootConfig Condition="'$(_WasmFingerprintBootConfig)' == ''">$(WasmFingerprintBootConfig)</_WasmFingerprintBootConfig>
<_WasmFingerprintBootConfig Condition="'$(_WasmFingerprintBootConfig)' == ''">$(OverrideHtmlAssetPlaceholders)</_WasmFingerprintBootConfig>
<_WasmFingerprintBootConfig Condition="'$(_WasmFingerprintBootConfig)' == ''">false</_WasmFingerprintBootConfig>
<_WasmBootConfigFileName>$(WasmBootConfigFileName)</_WasmBootConfigFileName>
<_WasmBootConfigFileName Condition="'$(_WasmBootConfigFileName)' == '' and '$(_TargetingNET100OrLater)' == 'true' and '$(_WasmInlineBootConfig)' == 'true'">dotnet.js</_WasmBootConfigFileName>
<_WasmBootConfigFileName Condition="'$(_WasmBootConfigFileName)' == '' and '$(_TargetingNET100OrLater)' == 'true'">dotnet.boot.js</_WasmBootConfigFileName>
<_WasmBootConfigFileName Condition="'$(_WasmBootConfigFileName)' == ''">blazor.boot.json</_WasmBootConfigFileName>
<_WasmPublishBootConfigFileName>publish.$(_WasmBootConfigFileName)</_WasmPublishBootConfigFileName>
Expand Down Expand Up @@ -259,6 +264,11 @@ Copyright (c) .NET Foundation. All rights reserved.
<Output TaskParameter="FilesToRemove" ItemName="_WasmBuildFilesToRemove" />
</ComputeWasmBuildAssets>

<ItemGroup Condition="'$(_WasmInlineBootConfig)' == 'true'">
<_WasmDotnetJsForBuild Include="@(ReferenceCopyLocalPaths)" Condition="'%(FileName)%(Extension)' == 'dotnet.js'" />
<_BuildAssetsCandidates Remove="@(_WasmDotnetJsForBuild)" />
</ItemGroup>

<PropertyGroup>
<_WasmBuildWebCilPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'webcil'))</_WasmBuildWebCilPath>
<_WasmBuildTmpWebCilPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'tmp-webcil'))</_WasmBuildTmpWebCilPath>
Expand Down Expand Up @@ -376,6 +386,7 @@ Copyright (c) .NET Foundation. All rights reserved.
DebugLevel="$(WasmDebugLevel)"
LinkerEnabled="false"
CacheBootResources="$(BlazorCacheBootResources)"
MergeWith="@(_WasmDotnetJsForBuild)"
OutputPath="$(_WasmBuildBootJsonPath)"
ConfigurationFiles="@(_WasmJsConfigStaticWebAsset)"
LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)"
Expand Down Expand Up @@ -503,6 +514,10 @@ Copyright (c) .NET Foundation. All rights reserved.
<Output TaskParameter="PromotedAssets" ItemName="_PromotedWasmPublishStaticWebAssets" />
<Output TaskParameter="FilesToRemove" ItemName="_PublishResolvedFilesToRemove" />
</ComputeWasmPublishAssets>

<ItemGroup Condition="'$(_WasmInlineBootConfig)' == 'true'">
<_WasmDotnetJsForPublish Include="@(ResolvedFileToPublish)" Condition="'%(FileName)%(Extension)' == 'dotnet.js'" />
</ItemGroup>

<PropertyGroup>
<_WasmPublishWebCilPath>$([MSBuild]::NormalizeDirectory($(IntermediateOutputPath), 'webcil', 'publish'))</_WasmPublishWebCilPath>
Expand Down Expand Up @@ -679,6 +694,7 @@ Copyright (c) .NET Foundation. All rights reserved.
DebugLevel="$(WasmDebugLevel)"
LinkerEnabled="$(PublishTrimmed)"
CacheBootResources="$(BlazorCacheBootResources)"
MergeWith="@(_WasmDotnetJsForPublish)"
OutputPath="$(IntermediateOutputPath)$(_WasmPublishBootConfigFileName)"
ConfigurationFiles="@(_WasmPublishConfigFile)"
LazyLoadedAssemblies="@(BlazorWebAssemblyLazyLoad)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public BuildOptions(
bool WarnAsError = true,
RuntimeVariant RuntimeType = RuntimeVariant.SingleThreaded,
IDictionary<string, string>? ExtraBuildEnvironmentVariables = null,
string BootConfigFileName = "dotnet.boot.js",
string? BootConfigFileName = null,
string NonDefaultFrameworkDir = "",
string ExtraMSBuildArgs = "",
bool WasmPerfTracing = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public abstract record MSBuildOptions
bool WarnAsError = true,
RuntimeVariant RuntimeType = RuntimeVariant.SingleThreaded,
IDictionary<string, string>? ExtraBuildEnvironmentVariables = null,
string BootConfigFileName = "dotnet.boot.js",
string? BootConfigFileName = null,
string NonDefaultFrameworkDir = "",
string ExtraMSBuildArgs = "",
bool WasmPerfTracing = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public PublishOptions(
bool WarnAsError = true,
RuntimeVariant RuntimeType = RuntimeVariant.SingleThreaded,
IDictionary<string, string>? ExtraBuildEnvironmentVariables = null,
string BootConfigFileName = "dotnet.boot.js",
string? BootConfigFileName = null,
string NonDefaultFrameworkDir = "",
string ExtraMSBuildArgs = "",
bool BuildOnlyAfterPublish = true,
Expand Down
2 changes: 1 addition & 1 deletion src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ private BootJsonData GetBootJson(string bootJsonPath)
public BootJsonData AssertBootJson(AssertBundleOptions options)
{
EnsureProjectDirIsSet();
string bootJsonPath = Path.Combine(options.BinFrameworkDir, options.BuildOptions.BootConfigFileName);
string bootJsonPath = Path.Combine(options.BinFrameworkDir, options.BuildOptions.BootConfigFileName ?? "dotnet.js");
BootJsonData bootJson = GetBootJson(bootJsonPath);
string spcExpectedFilename = $"System.Private.CoreLib{WasmAssemblyExtension}";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public virtual (string projectDir, string buildOutput) BuildProject(

buildOptions.ExtraBuildEnvironmentVariables["TreatPreviousAsCurrent"] = "false";

if (buildOptions.BootConfigFileName != "dotnet.boot.js")
if (buildOptions.BootConfigFileName != null)
{
// Omit implicit default
buildOptions = buildOptions with { ExtraMSBuildArgs = $"{buildOptions.ExtraMSBuildArgs} -p:WasmBootConfigFileName={buildOptions.BootConfigFileName}" };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ protected override IReadOnlyDictionary<string, bool> GetAllKnownDotnetFilesToFin
{ "dotnet.diagnostics.js.map", false },
};

if (assertOptions.BuildOptions.BootConfigFileName.EndsWith(".js"))
if (assertOptions.BuildOptions.BootConfigFileName?.EndsWith(".js") ?? false)
result[assertOptions.BuildOptions.BootConfigFileName] = false;

return result;
Expand Down Expand Up @@ -76,7 +76,7 @@ protected override IReadOnlySet<string> GetDotNetFilesExpectedSet(AssertBundleOp
res.Add("dotnet.diagnostics.js.map");
}

if (assertOptions.BuildOptions.BootConfigFileName.EndsWith(".js"))
if (assertOptions.BuildOptions.BootConfigFileName?.EndsWith(".js") ?? false)
res.Add(assertOptions.BuildOptions.BootConfigFileName);

return res;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,23 @@ public bool IsCoreAssembly(string fileName)
return false;
}

public void WriteConfigToFile(BootJsonData config, string outputPath, string? outputFileExtension = null)
public void WriteConfigToFile(BootJsonData config, string outputPath, string? outputFileExtension = null, string? mergeWith = null)
{
var output = JsonSerializer.Serialize(config, JsonOptions);

outputFileExtension ??= Path.GetExtension(outputPath);
Log.LogMessage($"Write config in format '{outputFileExtension}'");
if (outputFileExtension == ".js")
if (mergeWith != null)
{
string existingContent = File.ReadAllText(mergeWith);
output = existingContent.Replace("/*! dotnetBootConfig */", $"/*json-start*/{output}/*json-end*/");
if (existingContent.Equals(output))
Log.LogError($"Merging boot config into '{mergeWith}' failed to find the placeholder.");
}
else if (outputFileExtension == ".js")
{
output = $"export const config = /*json-start*/{output}/*json-end*/;";
}

File.WriteAllText(outputPath, output);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ public class GenerateWasmBootJson : Task

public string ApplicationEnvironment { get; set; }

public string MergeWith { get; set; }

public override bool Execute()
{
var entryAssemblyName = AssemblyName.GetAssemblyName(AssemblyPath).Name;
Expand Down Expand Up @@ -442,7 +444,7 @@ private void WriteBootConfig(string entryAssemblyName)
}

helper.ComputeResourcesHash(result);
helper.WriteConfigToFile(result, OutputPath);
helper.WriteConfigToFile(result, OutputPath, mergeWith: MergeWith);

void AddResourceToList(ITaskItem resource, ResourceHashesByNameDictionary resourceList, string resourceKey)
{
Expand Down
Loading