diff --git a/ICSharpCode.Decompiler.Console/CustomAssemblyResolver.cs b/ICSharpCode.Decompiler.Console/CustomAssemblyResolver.cs index d07d7dc0d..cb7e64fc8 100644 --- a/ICSharpCode.Decompiler.Console/CustomAssemblyResolver.cs +++ b/ICSharpCode.Decompiler.Console/CustomAssemblyResolver.cs @@ -5,78 +5,83 @@ using Mono.Cecil; namespace ICSharpCode.Decompiler.Console { - class CustomAssemblyResolver : DefaultAssemblyResolver - { - DotNetCorePathFinder dotNetCorePathFinder; - readonly string assemblyFileName; - readonly Dictionary loadedAssemblyReferences; + class CustomAssemblyResolver : DefaultAssemblyResolver + { + DotNetCorePathFinder dotNetCorePathFinder; + readonly string assemblyFileName; + readonly Dictionary loadedAssemblyReferences; - public string TargetFramework { get; set; } + public string TargetFramework { get; set; } - public CustomAssemblyResolver(string fileName) - { - this.assemblyFileName = fileName; - this.loadedAssemblyReferences = new Dictionary(); - AddSearchDirectory(Path.GetDirectoryName(fileName)); - RemoveSearchDirectory("."); - } + public CustomAssemblyResolver(string fileName) + { + this.assemblyFileName = fileName; + this.loadedAssemblyReferences = new Dictionary(); + AddSearchDirectory(Path.GetDirectoryName(fileName)); + RemoveSearchDirectory("."); + } - public override AssemblyDefinition Resolve(AssemblyNameReference name) - { - var targetFramework = TargetFramework.Split(new[] { ",Version=v" }, StringSplitOptions.None); - string file = null; - switch (targetFramework[0]) { - case ".NETCoreApp": - case ".NETStandard": - if (targetFramework.Length != 2) goto default; - if (dotNetCorePathFinder == null) { - var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1]; - dotNetCorePathFinder = new DotNetCorePathFinder(assemblyFileName, TargetFramework, version, this.loadedAssemblyReferences); - } - file = dotNetCorePathFinder.TryResolveDotNetCore(name); - if (file == null) { - string dir = Path.GetDirectoryName(assemblyFileName); - 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"); - } - if (file == null) - return base.Resolve(name); - else - return ModuleDefinition.ReadModule(file, new ReaderParameters() { AssemblyResolver = this }).Assembly; - default: - return base.Resolve(name); - } - } + public override AssemblyDefinition Resolve(AssemblyNameReference name) + { + var targetFramework = TargetFramework.Split(new[] { ",Version=v" }, StringSplitOptions.None); + string file = null; + switch (targetFramework[0]) { + case ".NETCoreApp": + case ".NETStandard": + if (targetFramework.Length != 2) goto default; + if (dotNetCorePathFinder == null) { + var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1]; + dotNetCorePathFinder = new DotNetCorePathFinder(assemblyFileName, TargetFramework, version, this.loadedAssemblyReferences); + } + file = dotNetCorePathFinder.TryResolveDotNetCore(name); + if (file == null) { + string dir = Path.GetDirectoryName(assemblyFileName); + 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"); + } + if (file == null) + return base.Resolve(name); + else + return ModuleDefinition.ReadModule(file, new ReaderParameters() { AssemblyResolver = this }).Assembly; + default: + return base.Resolve(name); + } + } - public override AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) - { - var targetFramework = TargetFramework.Split(new[] { ",Version=v" }, StringSplitOptions.None); - string file = null; - switch (targetFramework[0]) { - case ".NETCoreApp": - case ".NETStandard": - if (targetFramework.Length != 2) goto default; - if (dotNetCorePathFinder == null) { - var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1]; - dotNetCorePathFinder = new DotNetCorePathFinder(assemblyFileName, TargetFramework, version, this.loadedAssemblyReferences); - } - file = dotNetCorePathFinder.TryResolveDotNetCore(name); - if (file == null) { - string dir = Path.GetDirectoryName(assemblyFileName); - 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"); - } - if (file == null) - return base.Resolve(name, parameters); - else - return ModuleDefinition.ReadModule(file, parameters).Assembly; - default: - return base.Resolve(name, parameters); - } - } - } + public override AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) + { + try { + var targetFramework = TargetFramework.Split(new[] { ",Version=v" }, StringSplitOptions.None); + string file = null; + switch (targetFramework[0]) { + case ".NETCoreApp": + case ".NETStandard": + if (targetFramework.Length != 2) goto default; + if (dotNetCorePathFinder == null) { + var version = targetFramework[1].Length == 3 ? targetFramework[1] + ".0" : targetFramework[1]; + dotNetCorePathFinder = new DotNetCorePathFinder(assemblyFileName, TargetFramework, version, this.loadedAssemblyReferences); + } + file = dotNetCorePathFinder.TryResolveDotNetCore(name); + if (file == null) { + string dir = Path.GetDirectoryName(assemblyFileName); + 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"); + } + if (file == null) + return base.Resolve(name, parameters); + else + return ModuleDefinition.ReadModule(file, parameters).Assembly; + default: + return base.Resolve(name, parameters); + } + } catch (AssemblyResolutionException exception) { + System.Console.WriteLine(exception.ToString()); + return null; + } + } + } }