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

标签 c# reflection .net-core metaprogramming

我想要实现的是通过反射从解决方案中获取所有程序集,然后获取它们的类型,这样我就可以使用 .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/

相关文章:

c# - 绑定(bind) WPF MVVM ListView 内的命令的 MultiBinding 与 ViewModel 属性

c# - 程序从控制台正常运行,但不能从 Windows 服务运行

java - Scala 类字段上的 getAnnotations

.net-core - 尝试激活“GraphQL.Server.Internal.DefaultGraphQLExecuter”时无法解析类型 'xxxSchema' 的服务

c# - 当 ReturnResult 是自定义对象时 Mock 返回 null 值,但当它是基本类型 bool 时按预期工作

c# - 在 Enum C# 中使用 Switch 语句

c# - 将 Json 转换为 List<ExpandoObject>

Java反射——通过类名字符串获取级别

.net - 在 PropertyGrid 中设置只读属性将所有属性设置为只读

.net - .NET Core 2.0 中的 Websockets - 以 block 的形式接收消息