假設我們有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 –