diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2013-07-16 23:39:40 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@xamarin.com> | 2013-07-16 23:39:40 +0400 |
commit | f1363fb747c7233de2fd5f92fba2200f3b3e1f21 (patch) | |
tree | 2d5a3c36ad24a5d3163a84385b2bc077bf89d8a9 /Mono.Addins.CecilReflector | |
parent | 3dcdc3af421d3392fc762594b10eb8e087e66c6a (diff) |
Fix assembly resolution issue
Diffstat (limited to 'Mono.Addins.CecilReflector')
-rw-r--r-- | Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs b/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs index e573c91..cabeb30 100644 --- a/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs +++ b/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs @@ -41,10 +41,19 @@ namespace Mono.Addins.CecilReflector { IAssemblyLocator locator; Hashtable cachedAssemblies = new Hashtable (); + DefaultAssemblyResolver defaultAssemblyResolver; public void Initialize (IAssemblyLocator locator) { this.locator = locator; + defaultAssemblyResolver = new DefaultAssemblyResolver (); + defaultAssemblyResolver.ResolveFailure += delegate (object sender, AssemblyNameReference reference) { + var file = locator.GetAssemblyLocation (reference.FullName); + if (file != null) + return LoadAssembly (file, true); + else + return null; + }; } public object[] GetCustomAttributes (object obj, Type type, bool inherit) @@ -286,7 +295,9 @@ namespace Mono.Addins.CecilReflector AssemblyDefinition adef = (AssemblyDefinition) cachedAssemblies [file]; if (adef != null) return adef; - adef = AssemblyDefinition.ReadAssembly (file); + var rp = new ReaderParameters (ReadingMode.Deferred); + rp.AssemblyResolver = defaultAssemblyResolver; + adef = AssemblyDefinition.ReadAssembly (file, rp); if (adef != null && cache) cachedAssemblies [file] = adef; return adef; |