gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:21:12 25 4
gpt4 key购买 nike

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

我能用的是

  • AppDomain.CurrentDomain.GetAssemblies(); - 问题是这将获取所有引用和使用的程序集。在我的例子中,我想获取所有被引用但没有必要使用的程序集。所以问题是 JIT 编译正在删除未使用的项目的引用,所以在那种情况下这是行不通的。
  • 其他选项是使用 Assembly.GetExecutingAssembly().Location 获取 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().Select((item) => Assembly.Load(item)).ToList();可能是一个解决方案。

关于C# - 通过反射获取所有程序集及其类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46586063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com