Exemple #1
0
        /// <summary>
        /// Return a list of all referenced assemblies
        /// </summary>
        /// <param name="entry"></param>
        /// <param name="set"></param>
        /// <returns></returns>
        private static HashSet <Assembly> GetUniqueNestedReferencedAssemblies(Assembly entry, AssemblyName executing, HashSet <Assembly> set = null)
        {
            if (set == null)
            {
                set = new HashSet <Assembly>();
            }

            if (set.Add(entry))
            {
                foreach (Assembly child in entry.GetReferencedAssemblies().Where(an => AssemblyName.ReferenceMatchesDefinition(an, executing) || Assembly.Load(an).GetReferencedAssemblies().Any(nan => AssemblyName.ReferenceMatchesDefinition(nan, executing))).Select(an => Assembly.Load(an)))
                {
                    AssemblyHelper.GetUniqueNestedReferencedAssemblies(child, executing, set);
                }
            }

            return(set);
        }
Exemple #2
0
 /// <summary>
 /// Add a new assembly reference after configuration.
 /// This is rare but userful for importing external
 /// assemblies.
 /// </summary>
 /// <param name="assembly"></param>
 public static void AddAssembly(Assembly assembly)
 {
     AssemblyHelper.GetUniqueNestedReferencedAssemblies(assembly, Assembly.GetExecutingAssembly().GetName(), AssemblyHelper.Assemblies);
     AssemblyHelper.Types = new HashSet <Type>(
         AssemblyHelper.Assemblies.AsParallel().SelectMany(a => a.GetTypes()));
 }
Exemple #3
0
 static AssemblyHelper()
 {
     AssemblyHelper.Assemblies = AssemblyHelper.GetUniqueNestedReferencedAssemblies(Assembly.GetEntryAssembly(), Assembly.GetExecutingAssembly().GetName());
     AssemblyHelper.Types      = new HashSet <Type>(
         AssemblyHelper.Assemblies.AsParallel().SelectMany(a => a.GetTypes()));
 }