【发布时间】:2016-11-17 08:10:07
【问题描述】:
假设我们有类Base 和Derived,分别在Base.dll 和Derived.dll 中定义。 Derived 派生自 Base(虽然可能不是直接子类)
手头的问题是,如果我们手头有Derived.dll 但缺少Base.dll,如何以编程方式检查Derived 中的所有类型?例如了解可用的类型、可访问性、继承关系等
根据我的理解,反射(System.Reflection 命名空间中的东西)在这里不是一个选项,因为GetTypes() 将尝试加载不可用的Base.dll,因此抛出ReflectionTypeLoadException。
特别是,这是否可以使用Roslyn 或一些好的库轻松实现?
【问题讨论】:
-
我猜这是不可能的。 .NET 程序集不直接实现基类的类型以支持多态性。
-
您可能不得不为此使用 Mono.Cecil。 Roslyn 是编译器而不是元数据阅读器(但它必须读取元数据才能进行编译)。但是,您将无法解决所有关系吗?如果有一个基类实现的接口怎么办。您没有该类型信息,因为程序集不可用。
-
也许这个帖子可以帮助你:stackoverflow.com/questions/2646707/…
-
@elchido 一旦我在一个加载了
ReflectionOnlyLoad的程序集上调用GetTypes(),它仍然会尝试加载它的所有依赖项,因此ReflectionOnlyLoad 在这里不是一个选项。
标签: c# .net dll reflection roslyn