diff --git a/Mono.TextTemplating/Mono.TextTemplating/CurrentDomainAssemblyResolver.cs b/Mono.TextTemplating/Mono.TextTemplating/CurrentDomainAssemblyResolver.cs index 2d79a8a..e990380 100644 --- a/Mono.TextTemplating/Mono.TextTemplating/CurrentDomainAssemblyResolver.cs +++ b/Mono.TextTemplating/Mono.TextTemplating/CurrentDomainAssemblyResolver.cs @@ -26,17 +26,20 @@ Assembly ResolveReferencedAssemblies (object sender, ResolveEventArgs args) { var asmName = new AssemblyName (args.Name); + // The list of assembly files referenced by the template may contain reference assemblies, + // which will fail to load. Letting the host attempt to resolve the assembly first + // gives it an opportunity to resolve runtime assemblies. + var path = resolveAssemblyReference (asmName.Name + ".dll"); + if (File.Exists (path)) { + return Assembly.LoadFrom (path); + } + foreach (var asmFile in assemblyFiles) { if (asmName.Name == Path.GetFileNameWithoutExtension (asmFile)) { return Assembly.LoadFrom (asmFile); } } - var path = resolveAssemblyReference (asmName.Name + ".dll"); - if (File.Exists (path)) { - return Assembly.LoadFrom (path); - } - return null; } diff --git a/Mono.TextTemplating/Mono.TextTemplating/TemplateAssemblyLoadContext.cs b/Mono.TextTemplating/Mono.TextTemplating/TemplateAssemblyLoadContext.cs index fb48b73..a524bc5 100644 --- a/Mono.TextTemplating/Mono.TextTemplating/TemplateAssemblyLoadContext.cs +++ b/Mono.TextTemplating/Mono.TextTemplating/TemplateAssemblyLoadContext.cs @@ -96,6 +96,14 @@ protected override Assembly Load (AssemblyName assemblyName) Assembly ResolveAssembly (AssemblyLoadContext context, AssemblyName assemblyName) { + // The list of assembly files referenced by the template may contain reference assemblies, + // which will fail to load. Letting the host attempt to resolve the assembly first + // gives it an opportunity to resolve runtime assemblies. + var path = host.ResolveAssemblyReference (assemblyName.Name + ".dll"); + if (File.Exists (path)) { + return LoadFromAssemblyPath (path); + } + for (int i = 0; i < templateAssemblyFiles.Length; i++) { var asmFile = templateAssemblyFiles[i]; if (asmFile is null) { @@ -113,11 +121,6 @@ Assembly ResolveAssembly (AssemblyLoadContext context, AssemblyName assemblyName } } - var path = host.ResolveAssemblyReference (assemblyName.Name + ".dll"); - if (File.Exists (path)) { - return LoadFromAssemblyPath (path); - } - return null; } }