Exemple #1
0
 private void InitAssemblyCache()
 {
     if (this.assemblies != null)
     {
         return;
     }
     this.assemblies =
         DualityApp.GetDualityAssemblies()
         .Concat(DualityApp.GetDualityAssemblies().SelectMany(a => a.GetReferencedAssemblies().Select(n => Assembly.Load(n))))
         .Distinct()
         .Where(a => !DualityApp.DisposedPlugins.Contains(a))
         .ToArray();
     this.namespaces = this.assemblies
                       .SelectMany(a => a.GetExportedTypes())
                       .Select(t => t.Namespace)
                       .Distinct()
                       .Where(n => !string.IsNullOrEmpty(n))
                       .ToArray();
 }
Exemple #2
0
        private void InitAssemblyCache()
        {
            if (this.assemblies != null)
            {
                return;
            }

            // Retrieve a list of all loaded, non-disposed Assemblies
            Assembly[] loadedAssemblies =
                DualityApp.AssemblyLoader.LoadedAssemblies
                .Where(a => !DualityApp.PluginManager.DisposedPlugins.Contains(a))
                .ToArray();

            // Aggregate selectable assemblies based on Duality core Assemblies and their dependencies
            HashSet <Assembly> selectableAssemblies = new HashSet <Assembly>();

            foreach (Assembly coreAssembly in DualityApp.GetDualityAssemblies())
            {
                selectableAssemblies.Add(coreAssembly);

                AssemblyName[] referencedAssemblies = coreAssembly.GetReferencedAssemblies();
                foreach (AssemblyName reference in referencedAssemblies)
                {
                    string   shortName  = reference.GetShortAssemblyName();
                    Assembly dependency = loadedAssemblies.FirstOrDefault(a => a.GetShortAssemblyName() == shortName);
                    if (dependency != null)
                    {
                        selectableAssemblies.Add(dependency);
                    }
                }
            }

            this.assemblies = selectableAssemblies.ToArray();
            this.namespaces = this.assemblies
                              .SelectMany(a => { try { return(a.GetExportedTypes()); } catch (Exception) { return(new Type[0]); } })
                              .Select(t => t.Namespace)
                              .Distinct()
                              .Where(n => !string.IsNullOrEmpty(n))
                              .ToArray();
        }