IsDynamicAssembly() статический приватный Метод

static private IsDynamicAssembly ( Assembly asm ) : bool
asm Assembly
Результат bool
Пример #1
0
 private void DoInitializeExports()
 {
     lock (this)
     {
         if (delegates == null)
         {
             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"))
                 {
                     BinaryReader rdr           = new BinaryReader(stream);
                     int          assemblyCount = rdr.ReadInt32();
                     exports               = new Dictionary <int, List <int> >();
                     exportedAssemblies    = new AssemblyLoader[assemblyCount];
                     exportedAssemblyNames = new string[assemblyCount];
                     exportedLoaders       = new Dictionary <Assembly, AssemblyLoader>();
                     for (int i = 0; i < assemblyCount; i++)
                     {
                         exportedAssemblyNames[i] = String.Intern(rdr.ReadString());
                         int typeCount = rdr.ReadInt32();
                         if (typeCount == 0 && references == null)
                         {
                             wildcardExports.Add(exportedAssemblyNames[i]);
                         }
                         for (int j = 0; j < typeCount; j++)
                         {
                             int        hash = rdr.ReadInt32();
                             List <int> assemblies;
                             if (!exports.TryGetValue(hash, out assemblies))
                             {
                                 assemblies = new List <int>();
                                 exports.Add(hash, assemblies);
                             }
                             assemblies.Add(i);
                         }
                     }
                 }
                 if (references == null)
                 {
                     references = wildcardExports.ToArray();
                 }
             }
             else
             {
                 AssemblyName[] refNames = assemblyLoader.Assembly.GetReferencedAssemblies();
                 references = new string[refNames.Length];
                 for (int i = 0; i < references.Length; i++)
                 {
                     references[i] = refNames[i].FullName;
                 }
             }
             delegates = new AssemblyClassLoader[references.Length];
         }
     }
 }
Пример #2
0
 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)
         {
             return(assemblyLoader.Assembly);
         }
         list = new List <Assembly>();
         list.Add(assemblyLoader.Assembly);
     }
     LazyInitExports();
     if (exports != null)
     {
         List <int> assemblies;
         if (exports.TryGetValue(JVM.PersistableHash(unmangledName), out assemblies))
         {
             foreach (int index in assemblies)
             {
                 AssemblyLoader loader = exportedAssemblies[index];
                 if (loader == null)
                 {
                     Assembly asm = LoadAssemblyOrClearName(ref exportedAssemblyNames[index], true);
                     if (asm == null)
                     {
                         continue;
                     }
                     loader = exportedAssemblies[index] = GetLoaderForExportedAssembly(asm);
                 }
                 if (loader.Assembly.GetManifestResourceInfo(name) != null)
                 {
                     if (firstOnly)
                     {
                         return(loader.Assembly);
                     }
                     if (list == null)
                     {
                         list = new List <Assembly>();
                     }
                     list.Add(loader.Assembly);
                 }
             }
         }
     }
     return(null);
 }
Пример #3
0
            internal override VfsEntry GetEntry(string name)
            {
                VfsEntry entry = base.GetEntry(name);

                if (entry == null)
                {
                    Guid guid;
                    if (TryParseGuid(name, out guid))
                    {
                        foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
                        {
                            if (asm.ManifestModule.ModuleVersionId == guid &&
                                !ReflectUtil.IsDynamicAssembly(asm))
                            {
                                return(GetOrAddEntry(name, asm));
                            }
                        }
                    }
                    string assemblyName = ParseName(name);
                    if (assemblyName != null)
                    {
                        Assembly asm = null;
                        try
                        {
                            asm = Assembly.Load(assemblyName);
                        }
                        catch
                        {
                        }
                        if (asm != null &&
                            !ReflectUtil.IsDynamicAssembly(asm) &&
                            name == GetName(asm))
                        {
                            return(GetOrAddEntry(name, asm));
                        }
                    }
                }
                return(entry);
            }
Пример #4
0
            // HACK we try to figure out if an assembly is loaded in the Load context
            // http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx
            private static bool IsLoadContext(Assembly asm)
            {
                if (asm.ReflectionOnly)
                {
                    return(false);
                }

#if NONMONOTOUCH
                if (asm.GlobalAssemblyCache)
                {
                    return(true);
                }
#endif

                if (ReflectUtil.IsDynamicAssembly(asm) || asm.Location == "")
                {
                    return(false);
                }

                if (System.IO.Path.GetDirectoryName(asm.Location) == System.IO.Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory))
                {
                    // this is an optimization for the common case were the assembly was loaded from the app directory
                    return(true);
                }

                try
                {
                    if (Assembly.Load(asm.FullName) == asm)
                    {
                        return(true);
                    }
                }
                catch
                {
                }

                return(false);
            }
Пример #5
0
        private IEnumerable <java.net.URL> GetResourcesImpl(string unmangledName, bool getFromDelegates)
        {
            if (ReflectUtil.IsDynamicAssembly(assemblyLoader.Assembly))
            {
                yield break;
            }
#if !FIRST_PASS
            java.util.Enumeration urls = assemblyLoader.FindResources(unmangledName);
            while (urls.hasMoreElements())
            {
                yield return((java.net.URL)urls.nextElement());
            }
#endif
            string name = JVM.MangleResourceName(unmangledName);
            if (assemblyLoader.Assembly.GetManifestResourceInfo(name) != null)
            {
                yield return(MakeResourceURL(assemblyLoader.Assembly, name));
            }
            LazyInitExports();
            if (exports != null)
            {
                List <int> assemblies;
                if (exports.TryGetValue(JVM.PersistableHash(unmangledName), out assemblies))
                {
                    foreach (int index in assemblies)
                    {
                        AssemblyLoader loader = exportedAssemblies[index];
                        if (loader == null)
                        {
                            Assembly asm = LoadAssemblyOrClearName(ref exportedAssemblyNames[index], true);
                            if (asm == null)
                            {
                                continue;
                            }
                            loader = exportedAssemblies[index] = GetLoaderForExportedAssembly(asm);
                        }
#if !FIRST_PASS
                        urls = loader.FindResources(unmangledName);
                        while (urls.hasMoreElements())
                        {
                            yield return((java.net.URL)urls.nextElement());
                        }
#endif
                        if (loader.Assembly.GetManifestResourceInfo(name) != null)
                        {
                            yield return(MakeResourceURL(loader.Assembly, name));
                        }
                    }
                }
            }
            if (!getFromDelegates)
            {
                yield break;
            }
            for (int i = 0; i < delegates.Length; i++)
            {
                if (delegates[i] == null)
                {
                    Assembly asm = LoadAssemblyOrClearName(ref references[i], false);
                    if (asm != null)
                    {
                        delegates[i] = AssemblyClassLoader.FromAssembly(asm);
                    }
                }
                if (delegates[i] != null)
                {
                    foreach (java.net.URL url in delegates[i].FindResources(unmangledName))
                    {
                        yield return(url);
                    }
                }
            }
            if (!assemblyLoader.HasJavaModule)
            {
                foreach (java.net.URL url in GetBootstrapClassLoader().FindResources(unmangledName))
                {
                    yield return(url);
                }
            }
        }