C# - 通过反射获取所有程序集及其类型

6 c# reflection metaprogramming .net-core

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

我可以使用的是

  • AppDomain.CurrentDomain.GetAssemblies();- 问题是这将获得所有引用和使用的程序集。在我的情况下,我想获取所有被引用但没有必要使用的程序集。所以问题是 JIT 编译正在删除未使用的项目的引用,因此在这种情况下这将不起作用。
  • 其他选项是获取 DLL 的位置,Assembly.GetExecutingAssembly().Location然后加载所有程序集。这里的问题是,当后者我想使用.GetTypes()这个从类型抛出异常System.Reflection.ReflectionTypeLoadException然后加载器异常我有System.IO.FileNotFoundException: Could not load file or assembly Microsoft.EntityFrameworkCore. 问题在于,它试图使用找不到的库,显然使用加载 DLLAssembly.LoadFrom(dll)似乎也没有加载依赖项(库)。

我发现的是BuildManager.GetReferencedAssemblies,从我目前阅读的内容来看,它说这可以工作并且它正在获取所有引用,即使它们没有被使用,所以我也在 MsBuild 库中找到它,但不包含那个方法,所以我可能引用了错误的包。

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

提前致谢!

ani*_*ion 5

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