2011-06-14 117 views
1

演示: 我的項目中有兩個類庫。 1)行動2)過程。從.net dll讀取派生類型

行動圖書館包含接口IProcessor法工藝。

以我過程庫我有3類

A)ClassA的:IProcessor
B)ClassB的:IProcessor
C)ClassC:IProcessor

它實現了IProcessor接口。

當我試圖讀取過程庫的彙編我沒有判罰任意類型ClassA的,ClassB的,和ClassC

我用

Assembly processorAssembly = Assembly.LoadFile(process.dll); 
Type submitOfferType = processorAssembly.GetType("Namespace.ClassA"); 

閱讀從裝配型。

如何從dll獲取派生類型?

回答

1

您應該使用Assembly.LoadAssembly.LoadFrom而不是Assembly.LoadFile。試試這個:

Assembly processorAssembly = Assembly.Load(AssemblyName.GetAssemblyName("[...]process.dll")); 
Type submitOfferType = processorAssembly.GetType("Namespace.ClassA"); 

Assembly.LoadFile不會嘗試解析相對於文件與LoadFile您加載所以它甚至不會嘗試解決您的動作庫的依賴關係。出乎意料的是,它將解決它的問題,即不能通過簡單地忽略依賴來加載類型。

+0

感謝很多人想要我想要的 – PramodChoudhari 2011-06-15 06:45:55

+0

Peter現在我無法調用從Interface實現的方法 – PramodChoudhari 2011-06-15 06:56:36

2

更改爲:

Type submitOfferType = 
    processorAssembly.GetType("NamespaceOfProcessLibrary.ClassA"); 

Assembly.GetType需要全名之類的

+0

我嘗試使用命名空間,但力度的工作。它沒有顯示.GetTypes()在列表中返回 – PramodChoudhari 2011-06-14 11:38:01

+0

@Pramod:哪些類在GetTypes中顯示,哪些不在?你能在這裏看到一個模式嗎? – Heinzi 2011-06-14 13:19:27

+0

不是從IProcessor接口派生的類顯示在列表中,並且這些繼承不會顯示在GetTypes()返回列表中 – PramodChoudhari 2011-06-14 13:52:29

0

Assembly.GetType預計該類型的全名。這意味着您必須包含名稱空間。

0

試圖找到「ClassA的」確切的全名:

Assembly processorAssembly = Assembly.LoadFile(process.dll); 
var types= processorAssembly.GetTypes(); 

檢查在調試器來獲取實名「類型」的名稱。