下面的代碼失敗,「未能加載類型‘’從組件」 System.Xml.XmlDocument錯誤:爲什麼我不能動態地構造一個System.Xml.XmlDocument?
object a = Type.GetType("System.Xml.XmlDocument", true);
我必須的System.Xml的參考,其中的XmlDocument駐留。
任何想法我做錯了什麼?
下面的代碼失敗,「未能加載類型‘’從組件」 System.Xml.XmlDocument錯誤:爲什麼我不能動態地構造一個System.Xml.XmlDocument?
object a = Type.GetType("System.Xml.XmlDocument", true);
我必須的System.Xml的參考,其中的XmlDocument駐留。
任何想法我做錯了什麼?
如果您需要能夠從字符串動態加載,這將工作,你必須完全指定因爲在GAC中可能有多個版本的此dll。將Version = 2.0.0.0替換爲您要加載的版本,具體取決於您使用的框架版本。
Assembly xmlAssembly = Assembly.Load("System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
一旦你加載了程序集,你就可以動態地創建你之後的類的實例。
object xmlDoc = xmlAssembly.CreateInstance("System.Xml.XmlDocument", false);
使用完全合格的名稱,因爲組件可能還沒有被加載:
object a = Type.GetType("System.Xml.XmlDocument, System.Xml", true);
您通常可以通過追加逗號和程序集名稱即「Namespace.Type,Assembly」來獲得。但是,如果程序集強命名爲System.Xml.dll,則需要使用Type.AssemblyQualifiedName屬性,該屬性不僅返回「Namespace.Type,Assembly」,還返回識別程序集所需的簽名信息。此作品:
var xmlDocType = Type.GetType("System.Xml.XmlDocument, System.Xml, "
+ "Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
-1:我不明白這與接受的答案有何不同。 – 2010-07-08 19:02:40
用我的答案,你仍然只是使用Type.GetType,並假定程序集已經被引用。而且僅供參考,我剛剛有*確切*相同的問題,並且接受的答案不是我的解決方案。這是。 – 2010-07-08 19:05:17
失敗。 System.XmlDocument的AssemblyQualifiedName屬性需要的不僅僅是逗號+ System.Xml,可能是因爲它是強命名的。您需要使用Type.GetType(「System.Xml.XmlDocument,System.Xml,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089」) – 2010-07-08 18:57:20