/// <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);
 }
示例#2
0
 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);
     }
 }