从项目中的所有程序集加载所有类型

时间:2016-02-23 17:15:47

标签: c# .net reflection

我正在尝试搜索属于特定项目的所有类型到我的项目引用的所有程序集

我做了什么,通过这个加载项目中的所有程序集:

typeof(var) == Dict

typeof(var) == Array

然后搜索特定类型

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
var loadedPaths = loadedAssemblies.Select(a => a.Location).ToArray();

 var referencedPaths = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll");
                var toLoad = referencedPaths.Where(r => !loadedPaths.Contains(r, StringComparer.InvariantCultureIgnoreCase)).ToList();
                toLoad.ForEach(path => loadedAssemblies.Add(AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(path))));

现在当我尝试迭代类型时,我得到一个加载器异常 “无法加载文件或程序集'System.Windows”

和system.windows不是我的项目

引用的程序集

编辑:

执行以下操作时抛出异常

foreach(类型中的var类型) { }

1 个答案:

答案 0 :(得分:0)

这就是我在它期间的结果,它失败的原因是我的dll目录,比我的项目直接引用的dll更多。

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();

loadedAssemblies.SelectMany(x => x.GetReferencedAssemblies())
                .Distinct()
                .Where(y => loadedAssemblies.Any((a) => a.FullName == y.FullName) == false)
                .ToList()
                .ForEach(x => loadedAssemblies.Add(AppDomain.CurrentDomain.Load(x)));