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
return new MyAssemblyResolver(this, loadOnDemand); 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() public AssemblyReferenceClassifier GetAssemblyReferenceClassifier()
@ -630,15 +641,7 @@ namespace ICSharpCode.ILSpy
return debugInfoProvider; return debugInfoProvider;
} }
class MyUniversalResolver : UniversalAssemblyResolver UniversalAssemblyResolver? universalResolver;
{
public MyUniversalResolver(LoadedAssembly assembly)
: base(assembly.FileName, false, assembly.GetTargetFrameworkIdAsync().Result, PEStreamOptions.PrefetchEntireImage, DecompilerSettingsPanel.CurrentDecompilerSettings.ApplyWindowsRuntimeProjections ? MetadataReaderOptions.ApplyWindowsRuntimeProjections : MetadataReaderOptions.None)
{
}
}
MyUniversalResolver? universalResolver;
/// <summary> /// <summary>
/// Wait until the assembly is loaded. /// Wait until the assembly is loaded.

Loading…
Cancel
Save