从项目中的所有程序集加载所有类型
本文关键字:加载 类型 程序集 项目 | 更新日期: 2023-09-27 18:36:02
我正在尝试搜索属于我的项目引用的所有程序集的 strific 的所有类型
我所做的,通过以下方式加载我项目中的所有程序集:
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))));
然后搜索特定类型
const string @namespace = "name space to search"
var types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes())
.Where(t => t.IsClass && t.Namespace == @namespace );
现在当我尝试迭代类型时,我得到一个加载器异常"无法加载文件或程序集'System.Windows'
并且System.Windows不是我的项目引用的程序集
编辑:
执行以下操作时异常为 抛出
foreach (类型中的变量类型){}
这就是
我在其中结束的方式,它失败的原因是我的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)));