diff options
author | jfrijters <jfrijters> | 2011-03-16 11:03:16 +0300 |
---|---|---|
committer | jfrijters <jfrijters> | 2011-03-16 11:03:16 +0300 |
commit | f8a15b92018d0f0e7af2386f34321bab95fa3d3d (patch) | |
tree | ba9b55a58fd58f6f8001c341aa8b0d33c1e9d86b /reflect | |
parent | 1ce5cc687f8c91bd0f4276ec95b01ff1f0ef1fdb (diff) |
Added ForceAssemblyResolve option to allow assembly identity resolution to be overridden.
Diffstat (limited to 'reflect')
-rw-r--r-- | reflect/Universe.cs | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/reflect/Universe.cs b/reflect/Universe.cs index d58ec16c..14d0106e 100644 --- a/reflect/Universe.cs +++ b/reflect/Universe.cs @@ -145,6 +145,7 @@ namespace IKVM.Reflection private Type typeof_System_Security_Permissions_PermissionSetAttribute; private Type typeof_System_Security_Permissions_SecurityAction; private List<ResolveEventHandler> resolvers = new List<ResolveEventHandler>(); + private bool forceAssemblyResolve; internal Assembly Mscorlib { @@ -653,10 +654,14 @@ namespace IKVM.Reflection internal Assembly Load(string refname, Assembly requestingAssembly, bool throwOnError) { - Assembly asm = GetLoadedAssembly(refname); - if (asm != null) + Assembly asm = null; + if (!forceAssemblyResolve) { - return asm; + asm = GetLoadedAssembly(refname); + if (asm != null) + { + return asm; + } } if (resolvers.Count == 0) { @@ -681,7 +686,7 @@ namespace IKVM.Reflection if (asm != null) { string defname = asm.FullName; - if (refname != defname) + if (refname != defname && !forceAssemblyResolve) { assembliesByName.Add(refname, asm); } @@ -838,7 +843,10 @@ namespace IKVM.Reflection public Assembly CreateMissingAssembly(string assemblyName) { Assembly asm = new MissingAssembly(this, assemblyName); - assembliesByName.Add(asm.FullName, asm); + if (!forceAssemblyResolve) + { + assembliesByName.Add(asm.FullName, asm); + } return asm; } @@ -847,6 +855,12 @@ namespace IKVM.Reflection resolveMissingMembers = true; } + public bool ForceAssemblyResolve + { + get { return forceAssemblyResolve; } + set { forceAssemblyResolve = value; } + } + private struct ScopedTypeName : IEquatable<ScopedTypeName> { private readonly object scope; |