diff --git a/src/Uno.Wasm.Bootstrap/Uno.Wasm.Bootstrap.csproj b/src/Uno.Wasm.Bootstrap/Uno.Wasm.Bootstrap.csproj
index 9b9feeb00..c2e1ac814 100644
--- a/src/Uno.Wasm.Bootstrap/Uno.Wasm.Bootstrap.csproj
+++ b/src/Uno.Wasm.Bootstrap/Uno.Wasm.Bootstrap.csproj
@@ -62,8 +62,13 @@
true
tools
false
- false
+
+
+ true
+ tools
+ false
+
@@ -74,6 +79,7 @@
-->
<_UnoTaskDependencies Include="$(NuGetPackageRoot)/mono.cecil/0.11.4/lib/netstandard2.0/*.dll" />
+ <_UnoTaskDependencies Include="$(NuGetPackageRoot)/newtonsoft.json/13.0.2/lib/netstandard2.0/*.dll" />
this._context).config.environmentVariables['ASPNETCORE-BROWSER-TOOLS'];
+
// Take the place of the internal .NET for WebAssembly APIs for metadata updates coming
// from the "BrowserLink" feature.
- const bootstrapContext = this._context;
-
(function (Blazor) {
Blazor._internal = {
initialize: function () {
@@ -45,21 +47,11 @@ namespace Uno.WebAssembly.Bootstrap {
applyExisting: async function (): Promise {
- var hotreloadConfigResponse = await fetch(`/_framework/unohotreload`);
-
- var modifiableAssemblies = hotreloadConfigResponse.headers.get('DOTNET-MODIFIABLE-ASSEMBLIES');
- var aspnetCoreBrowserTools = hotreloadConfigResponse.headers.get('ASPNETCORE-BROWSER-TOOLS');
-
- if (modifiableAssemblies) {
- bootstrapContext.MONO.mono_wasm_setenv('DOTNET_MODIFIABLE_ASSEMBLIES', modifiableAssemblies);
- }
-
- // To uncomment once https://github.com/dotnet/aspnetcore/issues/37357#issuecomment-941237000 is released
- // if (aspnetCoreBrowserTools == "true")
+ if (browserToolsVariable == "true")
{
try {
var m = await import(`/_framework/blazor-hotreload.js`);
- m.receiveHotReload();
+ await m.receiveHotReloadAsync();
}
catch (e) {
console.error(`Failed to apply initial metadata delta ${e}`);
@@ -72,15 +64,15 @@ namespace Uno.WebAssembly.Bootstrap {
return HotReloadSupport._getApplyUpdateCapabilitiesMethod();
},
- applyHotReload: function (moduleId: any, metadataDelta: any, ilDelta: any, pdbDelta: any) {
+ applyHotReload: function (moduleId: any, metadataDelta: any, ilDelta: any, pdbDelta: any, updatedTypes: any) {
this.initialize();
- return HotReloadSupport._applyHotReloadDeltaMethod(moduleId, metadataDelta, ilDelta, pdbDelta || "");
+ return HotReloadSupport._applyHotReloadDeltaMethod(moduleId, metadataDelta, ilDelta, pdbDelta || "", updatedTypes || []);
}
};
})((window).Blazor || ((window).Blazor = {}));
// Apply pending updates caused by a browser refresh
- (window).Blazor._internal.initialize(bootstrapContext.BINDING);
+ (window).Blazor._internal.initialize();
await (window).Blazor._internal.applyExisting();
}
}
diff --git a/src/Uno.Wasm.MetadataUpdater/WebAssemblyHotReload.cs b/src/Uno.Wasm.MetadataUpdater/WebAssemblyHotReload.cs
index 0dd4dd2f7..d192e0f5f 100644
--- a/src/Uno.Wasm.MetadataUpdater/WebAssemblyHotReload.cs
+++ b/src/Uno.Wasm.MetadataUpdater/WebAssemblyHotReload.cs
@@ -62,7 +62,7 @@ internal static bool Initialize()
/// For framework use only.
///
[JSExport]
- public static void ApplyHotReloadDelta(string moduleIdString, string metadataDelta, string ilDeta, string pdbDelta)
+ public static void ApplyHotReloadDelta(string moduleIdString, string metadataDelta, string ilDeta, string pdbDelta, int[] updatedTypes)
{
if (_linkerEnabled)
{
@@ -84,6 +84,7 @@ public static void ApplyHotReloadDelta(string moduleIdString, string metadataDel
_updateDeltas[0].MetadataDelta = Convert.FromBase64String(metadataDelta);
_updateDeltas[0].ILDelta = Convert.FromBase64String(ilDeta);
_updateDeltas[0].PdbBytes = Convert.FromBase64String(pdbDelta);
+ _updateDeltas[0].UpdatedTypes = updatedTypes;
_hotReloadAgent!.ApplyDeltas(_updateDeltas);
}
diff --git a/src/Uno.Wasm.Sample/Program.cs b/src/Uno.Wasm.Sample/Program.cs
index 9224eae43..a320960d4 100644
--- a/src/Uno.Wasm.Sample/Program.cs
+++ b/src/Uno.Wasm.Sample/Program.cs
@@ -21,6 +21,11 @@
using System.Globalization;
using System.Runtime.InteropServices.JavaScript;
using System.Threading.Tasks;
+using System.Reflection.Metadata;
+using Uno.Wasm.Sample;
+using System.Linq;
+
+[assembly: MetadataUpdateHandler(typeof(MyHandler))]
namespace Uno.Wasm.Sample
{
@@ -81,6 +86,11 @@ static void Main(string[] args)
}, null, 5000, 5000);
}
}
+ public static class MyHandler
+ {
+ internal static void ClearCache(Type[]? types) => Console.WriteLine("MyHandler.ClearCache");
+ internal static void UpdateApplication(Type[]? types) => Console.WriteLine($"MyHandler.UpdateApplication {types.Length} types: {string.Join(", ", types.Select(t => t.Name ))}");
+ }
#if NET7_0_OR_GREATER
public static partial class Imports