/// <summary> /// Adds all types from assemblies found in <paramref name="directory"/>. /// </summary> /// <param name="expression"></param> /// <param name="directory"></param> /// <param name="includeSubDirectories"></param> /// <returns></returns> public static IConventionExpression Directory(this IConventionExpression expression, string directory, bool? includeSubDirectories = null) { var assemblies = new List<Assembly>(); var option = includeSubDirectories.GetValueOrDefault() ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; const string pattern = @".+\.(dll|exe)^"; var files = System.IO.Directory.GetFiles(directory, "*.*", option) .Where(x => Regex.IsMatch(x, pattern, RegexOptions.IgnoreCase)); foreach (var file in files) { Assembly assembly; if (!TryLoadAssembly(file, out assembly)) continue; assemblies.Add(assembly); } return expression.Assemblies(assemblies); }
public static ILookup<IPackageInfo, AssemblyName> InGac(this IPackageExporter exporter, IEnumerable<IPackageInfo> packages) { var domain = TempDomain(); try { var loader = ((Loader)domain.CreateInstanceFromAndUnwrap( typeof(Loader).Assembly.Location, typeof(Loader).FullName)); return (from package in packages.NotNull().Select(x => x.Load()).NotNull() from assembly in exporter.Assemblies(package, ExecutionEnvironment.Any) where loader.InGAC(assembly.AssemblyName) select new { package, assembly.AssemblyName } ).ToLookup(x => (IPackageInfo)x.package, x => x.AssemblyName); } catch { return (new AssemblyName[0]).ToLookup(x => (IPackageInfo)null); } finally { AppDomain.Unload(domain); } }