Skip to content

Commit

Permalink
fix: Add error message when linker is enabled during EnC session
Browse files Browse the repository at this point in the history
  • Loading branch information
jeromelaban committed Nov 28, 2021
1 parent adbd48d commit 7c261dd
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,23 @@ namespace Uno.UI.RemoteControl.HotReload
partial class ClientHotReloadProcessor : IRemoteControlProcessor
{
private ApplyUpdateHandler _applyUpdate;
private bool _linkerEnabled;

private delegate void ApplyUpdateHandler(Assembly assembly, ReadOnlySpan<byte> metadataDelta, ReadOnlySpan<byte> ilDelta, ReadOnlySpan<byte> pdbDelta);

partial void InitializeMetadataUpdater()
{
_linkerEnabled = string.Equals(Environment.GetEnvironmentVariable("UNO_BOOTSTRAP_LINKER_ENABLED"), "true", StringComparison.OrdinalIgnoreCase);

if (_linkerEnabled)
{
var message = "The application was compiled with the IL linker enabled, hot reload is disabled. " +
"See WasmShellILLinkerEnabled for more details.";

Console.WriteLine($"[ERROR] {message}");
}
}

private string[] GetMetadataUpdateCapabilities()
{
if (Type.GetType("System.Reflection.Metadata.MetadataUpdater") is { } type)
Expand Down Expand Up @@ -60,14 +74,18 @@ private void AssemblyReload(AssemblyDeltaReload assemblyDeltaReload)
}

var moduleIdGuid = Guid.Parse(assemblyDeltaReload.ModuleId);
var assembly = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.Modules.FirstOrDefault() is Module m && m.ModuleVersionId == moduleIdGuid);
var assemblyQuery = from a in AppDomain.CurrentDomain.GetAssemblies()
from m in a.Modules
where m.ModuleVersionId == moduleIdGuid
select a;

var assembly = assemblyQuery.FirstOrDefault();

ReadOnlySpan<byte> metadataDelta = Convert.FromBase64String(assemblyDeltaReload.MetadataDelta);
ReadOnlySpan<byte> ilDeta = Convert.FromBase64String(assemblyDeltaReload.ILDelta);
ReadOnlySpan<byte> pdbDelta = Convert.FromBase64String(assemblyDeltaReload.PdbDelta);

if (!(assembly is null))
if (assembly is not null)
{
if (this.Log().IsEnabled(LogLevel.Debug))
{
Expand Down Expand Up @@ -99,6 +117,13 @@ private void AssemblyReload(AssemblyDeltaReload assemblyDeltaReload)
_applyUpdate(assembly, metadataDelta, ilDeta, pdbDelta);
#endif
}
else
{
if (this.Log().IsEnabled(LogLevel.Trace))
{
this.Log().Trace($"Unable to applying IL delta for {assemblyDeltaReload.FilePath} (Unable to find module with guid:{assemblyDeltaReload.ModuleId}, is the IL Linker enabled?)");
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@ public partial class ClientHotReloadProcessor : IRemoteControlProcessor
public ClientHotReloadProcessor(IRemoteControlClient rcClient)
{
_rcClient = rcClient;
InitializeMetadataUpdater();
}

partial void InitializeMetadataUpdater();

string IRemoteControlProcessor.Scope => HotReloadConstants.ScopeName;

public async Task Initialize()
Expand Down

0 comments on commit 7c261dd

Please sign in to comment.