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

本文关键字:加载 类型 程序集 项目 | 更新日期: 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)));