C# – 通过反射及其类型获取所有装配

我想要实现的是从解决方案中获取所有程序集的反射,然后是它们的类型,因此我可以使用.NET Core 2.0将它们放在集合[]中.

我能用的是

> AppDomain.CurrentDomain.GetAssemblies(); – 问题是这将获得所有引用和使用的程序集.在我的情况下,我想获得所有引用的程序集,但不是必需的.所以问题是JIT编译正在删除未使用的项目的引用,因此在这种情况下这不起作用.
>其他选项是使用Assembly.GetExecutingAssembly().位置获取DLL的位置,然后加载所有程序集.这里的问题是,当后者我想使用.GetTypes()时,从类型System.Reflection.ReflectionTypeLoadException抛出异常然后加载器异常我有System.IO.FileNotFoundException:无法加载文件或程序集Microsoft.EntityFrameworkCore.问题是,它正在尝试使用无法找到的库,使用Assembly.LoadFrom(dll)显然加载DLL似乎也不会加载依赖项(库).

我发现的是BuildManager.GetReferencedAssemblies,从我到目前为止读到的,它说这可以工作并且它获得所有引用,即使它们没有被使用,所以我也在MsBuild库中找到它,但是不包含该方法,所以我可能会引用错误的包.

我愿意接受任何建议,如何从.NET Core 2.0项目加载所有解决方案程序集及其类型.

提前致谢!

最佳答案 我有一个非常相似的问题.我不确定这是否适用于您的情况,但List< Assembly> usedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies().选择((item)=> Assembly.Load(item)).ToList();可能是一个解决方案.

点赞