我試圖從程序集列表中查找運行時的類型;我的代碼是這樣的:爲什麼Type.GetType()工作和Assembly.GetType()不起作用?
foreach (Assembly assembly in assembliesToSearch)
{
Type t = assembly.GetType(assemblyName);
if (t != null)
{
return t;
}
}
,而我的問題是,t總是會出現爲空。與調試器和VS2010中級窗口中播放的時候,我注意到當我把一個斷點在循環中執行以下操作:
Type.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
工程確定,但
assembly.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
不(裝配時是我知道的程序集包含我正在尋找的類 - 在調試器中,我可以在assembly.GetTypes()上放置一個監視器,瀏覽到我嘗試實例化的類,並調用assembly.GetType(「MyNamespace.MyClass ,MyNamespace「))。
有誰知道爲什麼使用Type.GetType()搜索所有程序集的作品,但搜索我知道的程序集包含使用assembly.GetType()類型不?
感謝您的迴應;我最初的代碼示例沒有清楚地顯示出來,但是在我的循環中,我調用了Type t = assembly.GetType(assemblyName),assemblyName是「MyNamespace.MyClass,MyAssembly」,所以通過我的計算,它應該返回預期類型。 –
@David:'MyNamespace.MyClass,MyAssembly'仍然是一個程序集限定的類型名稱。您需要從該字符串中刪除程序集名稱以使其與'Assembly.GetType()'一起使用。 – adrianbanks
@adrianbanks - 你在哪裏學習的「Type.GetType()很可能會使用當前程序集的引用來解析類型」 - 它似乎不在[MSDN here]中(http:// msdn .microsoft.com/EN-US /庫/ w3f99sx1(v = vs.110)的.aspx)。另外,什麼是「當前組裝」?在我現在看的情況下,裝配的類型 - 這是發現! - 不是具有當前執行方法的程序集,也不是它的引用,但它是調用堆棧上的程序集。(我的問題的原因:我的程序集名稱中的版本是錯誤的,但找到了類型。) – davidbak