|
|
@ -2,6 +2,7 @@ |
|
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
|
|
|
|
|
|
|
|
|
|
using System; |
|
|
|
using System; |
|
|
|
|
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Text.RegularExpressions; |
|
|
|
using System.Text.RegularExpressions; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using System.Threading.Tasks; |
|
|
@ -20,6 +21,8 @@ namespace ICSharpCode.ILSpyAddIn |
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
|
public static class ILSpyDecompilerService |
|
|
|
public static class ILSpyDecompilerService |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
static readonly Dictionary<FileName, AssemblyDefinition> assemblyCache = new Dictionary<FileName, AssemblyDefinition>(); |
|
|
|
|
|
|
|
|
|
|
|
class ILSpyAssemblyResolver : DefaultAssemblySearcher, IAssemblyResolver |
|
|
|
class ILSpyAssemblyResolver : DefaultAssemblySearcher, IAssemblyResolver |
|
|
|
{ |
|
|
|
{ |
|
|
|
public ILSpyAssemblyResolver(FileName fileName) |
|
|
|
public ILSpyAssemblyResolver(FileName fileName) |
|
|
@ -27,6 +30,20 @@ namespace ICSharpCode.ILSpyAddIn |
|
|
|
{ |
|
|
|
{ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AssemblyDefinition Resolve(DomAssemblyName name, ReaderParameters parameters) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var file = FindAssembly(name); |
|
|
|
|
|
|
|
if (file == null) return null; |
|
|
|
|
|
|
|
AssemblyDefinition asm; |
|
|
|
|
|
|
|
lock (assemblyCache) { |
|
|
|
|
|
|
|
if (!assemblyCache.TryGetValue(file, out asm)) { |
|
|
|
|
|
|
|
asm = AssemblyDefinition.ReadAssembly(file, parameters); |
|
|
|
|
|
|
|
assemblyCache.Add(file, asm); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return asm; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name) |
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return Resolve(name, new ReaderParameters()); |
|
|
|
return Resolve(name, new ReaderParameters()); |
|
|
@ -34,9 +51,7 @@ namespace ICSharpCode.ILSpyAddIn |
|
|
|
|
|
|
|
|
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) |
|
|
|
public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var file = FindAssembly(new DomAssemblyName(name.FullName)); |
|
|
|
return Resolve(new DomAssemblyName(name.FullName), parameters); |
|
|
|
if (file == null) return null; |
|
|
|
|
|
|
|
return AssemblyDefinition.ReadAssembly(file, parameters); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public AssemblyDefinition Resolve(string fullName) |
|
|
|
public AssemblyDefinition Resolve(string fullName) |
|
|
@ -46,9 +61,7 @@ namespace ICSharpCode.ILSpyAddIn |
|
|
|
|
|
|
|
|
|
|
|
public AssemblyDefinition Resolve(string fullName, ReaderParameters parameters) |
|
|
|
public AssemblyDefinition Resolve(string fullName, ReaderParameters parameters) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var file = FindAssembly(new DomAssemblyName(fullName)); |
|
|
|
return Resolve(new DomAssemblyName(fullName), parameters); |
|
|
|
if (file == null) return null; |
|
|
|
|
|
|
|
return AssemblyDefinition.ReadAssembly(file, parameters); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|