Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2011-03-16 11:03:16 +0300
committerjfrijters <jfrijters>2011-03-16 11:03:16 +0300
commitf8a15b92018d0f0e7af2386f34321bab95fa3d3d (patch)
treeba9b55a58fd58f6f8001c341aa8b0d33c1e9d86b /reflect
parent1ce5cc687f8c91bd0f4276ec95b01ff1f0ef1fdb (diff)
Added ForceAssemblyResolve option to allow assembly identity resolution to be overridden.
Diffstat (limited to 'reflect')
-rw-r--r--reflect/Universe.cs24
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;