/// <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); }
/// <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())); }
static AssemblyHelper() { AssemblyHelper.Assemblies = AssemblyHelper.GetUniqueNestedReferencedAssemblies(Assembly.GetEntryAssembly(), Assembly.GetExecutingAssembly().GetName()); AssemblyHelper.Types = new HashSet <Type>( AssemblyHelper.Assemblies.AsParallel().SelectMany(a => a.GetTypes())); }