зеркало из https://github.com/mono/ikvm-fork.git
Made dynamic assembly detection more reliable and moved the utility method to ReflectUtil.
This commit is contained in:
Родитель
3e43bbd26d
Коммит
6dd2495ad8
|
@ -1761,10 +1761,7 @@ namespace IKVM.Internal
|
|||
{
|
||||
if (delegates == null)
|
||||
{
|
||||
#pragma warning disable 184
|
||||
// during ikvmc build: warning CS0184: The given expression is never of the provided ('IKVM.Reflection.Emit.AssemblyBuilder') type
|
||||
if (!(assemblyLoader.Assembly is AssemblyBuilder) && assemblyLoader.Assembly.GetManifestResourceInfo("ikvm.exports") != null)
|
||||
#pragma warning restore 184
|
||||
if (!(ReflectUtil.IsDynamicAssembly(assemblyLoader.Assembly)) && assemblyLoader.Assembly.GetManifestResourceInfo("ikvm.exports") != null)
|
||||
{
|
||||
List<string> wildcardExports = new List<string>();
|
||||
using (Stream stream = assemblyLoader.Assembly.GetManifestResourceStream("ikvm.exports"))
|
||||
|
@ -2042,6 +2039,10 @@ namespace IKVM.Internal
|
|||
#if !STATIC_COMPILER
|
||||
internal Assembly FindResourceAssembliesImpl(string unmangledName, string name, bool firstOnly, ref List<Assembly> list)
|
||||
{
|
||||
if(ReflectUtil.IsDynamicAssembly(assemblyLoader.Assembly))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if(assemblyLoader.Assembly.GetManifestResourceInfo(name) != null)
|
||||
{
|
||||
if(firstOnly)
|
||||
|
@ -2096,6 +2097,7 @@ namespace IKVM.Internal
|
|||
{
|
||||
return new Assembly[] { first };
|
||||
}
|
||||
LazyInitExports();
|
||||
for(int i = 0; i < delegates.Length; i++)
|
||||
{
|
||||
if(delegates[i] == null)
|
||||
|
|
|
@ -427,24 +427,6 @@ namespace IKVM.Internal
|
|||
assemblyBuilder.SetCustomAttribute(debugAttr);
|
||||
return JVM.IsSaveDebugImage ? assemblyBuilder.DefineDynamicModule("ikvmdump.dll", "ikvmdump.dll", debug) : assemblyBuilder.DefineDynamicModule(name.Name, debug);
|
||||
}
|
||||
|
||||
internal static bool IsDynamicAssembly(Assembly asm)
|
||||
{
|
||||
#if NET_4_0
|
||||
return asm.IsDynamic();
|
||||
#else
|
||||
if (asm is System.Reflection.Emit.AssemblyBuilder)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (asm.Equals(Instance.ModuleBuilder.Assembly))
|
||||
{
|
||||
// this can happen on Orcas, where an AssemblyBuilder has a corresponding Assembly
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
#endif // !STATIC_COMPILER
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,5 +65,17 @@ namespace IKVM.Internal
|
|||
return type.Assembly;
|
||||
}
|
||||
#endif
|
||||
|
||||
internal static bool IsDynamicAssembly(Assembly asm)
|
||||
{
|
||||
#if NET_4_0
|
||||
return asm.IsDynamic();
|
||||
#else
|
||||
// HACK pre-.NET 4.0 there is no API for this
|
||||
string manifest = asm.ManifestModule.Name;
|
||||
return manifest == "<In Memory Module>" // .NET name
|
||||
|| manifest == "Default Dynamic Module"; // Mono name
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -310,7 +310,7 @@ namespace IKVM.NativeCode.ikvm.runtime
|
|||
{
|
||||
public static object loadClassFromAssembly(Assembly asm, string className)
|
||||
{
|
||||
if(DynamicClassLoader.IsDynamicAssembly(asm))
|
||||
if(ReflectUtil.IsDynamicAssembly(asm))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
@ -320,7 +320,7 @@ namespace IKVM.NativeCode.ikvm.runtime
|
|||
|
||||
public static bool findResourceInAssembly(Assembly asm, string resourceName)
|
||||
{
|
||||
if(DynamicClassLoader.IsDynamicAssembly(asm))
|
||||
if(ReflectUtil.IsDynamicAssembly(asm))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче