Browse Source

Fix #2310: Do not set mainAssemblyFileName in UniversalAssemblyResolver in case LoadedAssembly.FileName is not a full path.

pull/2320/head
Siegfried Pammer 4 years ago
parent
commit
5740068753
  1. 25
      ILSpy/LoadedAssembly.cs

25
ILSpy/LoadedAssembly.cs

@ -610,9 +610,20 @@ namespace ICSharpCode.ILSpy @@ -610,9 +610,20 @@ namespace ICSharpCode.ILSpy
return new MyAssemblyResolver(this, loadOnDemand);
}
private MyUniversalResolver GetUniversalResolver()
private UniversalAssemblyResolver GetUniversalResolver()
{
return LazyInitializer.EnsureInitialized(ref this.universalResolver, () => new MyUniversalResolver(this))!;
return LazyInitializer.EnsureInitialized(ref this.universalResolver, () => {
var targetFramework = this.GetTargetFrameworkIdAsync().Result;
var readerOptions = DecompilerSettingsPanel.CurrentDecompilerSettings.ApplyWindowsRuntimeProjections
? MetadataReaderOptions.ApplyWindowsRuntimeProjections
: MetadataReaderOptions.None;
var rootedPath = Path.IsPathRooted(this.FileName) ? this.FileName : null;
return new UniversalAssemblyResolver(rootedPath, throwOnError: false, targetFramework,
PEStreamOptions.PrefetchEntireImage, readerOptions);
})!;
}
public AssemblyReferenceClassifier GetAssemblyReferenceClassifier()
@ -630,15 +641,7 @@ namespace ICSharpCode.ILSpy @@ -630,15 +641,7 @@ namespace ICSharpCode.ILSpy
return debugInfoProvider;
}
class MyUniversalResolver : UniversalAssemblyResolver
{
public MyUniversalResolver(LoadedAssembly assembly)
: base(assembly.FileName, false, assembly.GetTargetFrameworkIdAsync().Result, PEStreamOptions.PrefetchEntireImage, DecompilerSettingsPanel.CurrentDecompilerSettings.ApplyWindowsRuntimeProjections ? MetadataReaderOptions.ApplyWindowsRuntimeProjections : MetadataReaderOptions.None)
{
}
}
MyUniversalResolver? universalResolver;
UniversalAssemblyResolver? universalResolver;
/// <summary>
/// Wait until the assembly is loaded.

Loading…
Cancel
Save