2011-02-18 113 views
2

當我有我的項目的目標框架設置爲框架4.0和運行下面的代碼:爲什麼我得到.NET4不同的結果相比,.NET 3.5

Assembly pAsm = Assembly.LoadFrom(aMagPath); 
foreach (Module m in pAsm.GetModules()) 
{ 
    Type t = m.GetType("typeName")); 
} 

typeName爲從第三用戶定義類型黨的dll。

t爲空。

如果我將目標類型更改爲Framework 3.5 t不爲null。

我不改變別的。我只是改變目標框架並重新運行應用程序。

任何人都可以解釋爲什麼發生這種情況? 是否有一些工具可以讓我更深入地研究這個問題?

更新: 我將我的代碼更改爲以下內容。

Assembly pAsm = Assembly.LoadFrom(aMagPath); 
Type t = pAsm.GetType(String.Format("GM.FCAT.{0}.{0}+FBlock+{1}Function+{2}CaseStream+{2}RepeatableParameterStream", FBlockName, pName, aParam.Name), false); 

我仍然有同樣的問題。 版本4.0中t = null,版本3.5中不存在

當我將它加載到.net反射器時,我找不到該類型。所以我想這不是真的。

+0

什麼是「m」,您尋找的是什麼類型? – 2011-02-18 14:40:22

+0

什麼是m,括號中的含義是什麼? – 2011-02-18 14:41:23

回答

1

某些框架類型在版本之間移動了組件,使用程序集綁定重定向來使其通常對客戶端不可見。那可能會解釋發生了什麼,但很難說不知道你試圖找到哪個組件和類型。

編輯:好的,現在,我們已經有了更多的背景下...

這表明該類型真的是沒有在該模塊中......這有可能是在有.NET 3.5的一個bug它在父級程序集中查找類型名稱而不是在模塊中。

是否有任何理由爲什麼你在逐個模塊的基礎上尋找,而不是隻是要求程序集本身的類型?

相關問題