diff --git a/ICSharpCode.Decompiler/DotNetCore/UniversalAssemblyResolver.cs b/ICSharpCode.Decompiler/DotNetCore/UniversalAssemblyResolver.cs index 41962431a..a4ce5393c 100644 --- a/ICSharpCode.Decompiler/DotNetCore/UniversalAssemblyResolver.cs +++ b/ICSharpCode.Decompiler/DotNetCore/UniversalAssemblyResolver.cs @@ -37,7 +37,7 @@ namespace ICSharpCode.Decompiler public string TargetFramework { get; set; } - private UniversalAssemblyResolver(string mainAssemblyFileName, bool throwOnError) + protected UniversalAssemblyResolver(string mainAssemblyFileName, bool throwOnError) { this.mainAssemblyFileName = mainAssemblyFileName; this.baseDirectory = Path.GetDirectoryName(mainAssemblyFileName); diff --git a/ILSpy/LoadedAssembly.cs b/ILSpy/LoadedAssembly.cs index e37683f02..c89225dcd 100644 --- a/ILSpy/LoadedAssembly.cs +++ b/ILSpy/LoadedAssembly.cs @@ -243,8 +243,14 @@ namespace ICSharpCode.ILSpy return assemblyList.assemblyLookupCache.GetOrAdd(fullName, LookupReferencedAssemblyInternal); } - DotNetCorePathFinder dotNetCorePathFinder; - + class MyUniversalResolver : UniversalAssemblyResolver + { + public MyUniversalResolver(LoadedAssembly assembly) + : base(assembly.FileName, false) + { + } + } + LoadedAssembly LookupReferencedAssemblyInternal(string fullName) { foreach (LoadedAssembly asm in assemblyList.GetAssemblies()) { @@ -260,33 +266,13 @@ namespace ICSharpCode.ILSpy return (LoadedAssembly)App.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Func(LookupReferencedAssembly), fullName); } - var targetFramework = TargetFrameworkId.Split(new[] { ",Version=v" }, StringSplitOptions.None); + var resolver = new MyUniversalResolver(this) { TargetFramework = TargetFrameworkId }; var name = AssemblyNameReference.Parse(fullName); - string file = null; - switch (targetFramework[0]) { - case ".NETCoreApp": - case ".NETStandard": - if (targetFramework.Length != 2) break; - if (dotNetCorePathFinder == null) { - var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1]; - dotNetCorePathFinder = new DotNetCorePathFinder(fileName, TargetFrameworkId, version, this.loadedAssemblyReferences); - } - file = dotNetCorePathFinder.TryResolveDotNetCore(name); - break; - default: - file = GacInterop.FindAssemblyInNetGac(name); - break; - } - if (file == null) { - string dir = Path.GetDirectoryName(this.fileName); - if (File.Exists(Path.Combine(dir, name.Name + ".dll"))) - file = Path.Combine(dir, name.Name + ".dll"); - else if (File.Exists(Path.Combine(dir, name.Name + ".exe"))) - file = Path.Combine(dir, name.Name + ".exe"); - } + var file = resolver.Resolve(name); + if (file != null) { - loadedAssemblyReferences.AddMessage(fullName, MessageKind.Info, "Success - Loading from: " + file); - return assemblyList.OpenAssembly(file, true); + loadedAssemblyReferences.AddMessage(fullName, MessageKind.Info, "Success - Loading from: " + file.MainModule.FileName); + return assemblyList.OpenAssembly(file.MainModule.FileName, true); } else { loadedAssemblyReferences.AddMessage(fullName, MessageKind.Error, "Could not find reference: " + fullName); return null;