假设我们有Base
和Derived
,分别在Base.dll
和Derived.dll
中定义。 Derived
从Base
导出(可能不是一个直接的子类,但是)如何在不使用反射的情况下检查.NET程序集
眼下的问题是,如果我们手头有Derived.dll
但Base.dll
丢失,如何以编程方式检查所有类型Derived
?例如知道什么类型可供选择,它们的可访问性,继承关系等
根据我的理解,反射(在System.Reflection
命名空间的东西)是不是一个不错的选择,因为GetTypes()
会尝试加载Base.dll
这是不可用,从而抛出ReflectionTypeLoadException
。
特别是,这是可以使用Roslyn
或一些好的库容易实现的东西吗?
我想这是不可能的。 .NET程序集不直接实现基类的类型以支持多态性。 –
您可能必须为此使用Mono.Cecil。 Roslyn是编译器,不是元数据阅读器(但它必须读取元数据才能编译)。你将无法解决所有的关系?如果有一个由基类实现的接口会怎么样?您没有该类型信息,因为程序集不可用。 –
也许这个线程可能会帮助你:http://stackoverflow.com/questions/2646707/something-better-than-net-reflector –