为什么我不能动态构造System.Xml.XmlDocument?

时间:2009-09-29 08:04:02

标签: reflection xmldocument

以下代码失败,出现'无法加载类型'System.Xml.XmlDocument'来自程序集'错误:

object a = Type.GetType("System.Xml.XmlDocument", true);

我引用了XmlDocument所在的System.Xml。

知道我做错了吗?

3 个答案:

答案 0 :(得分:2)

如果您需要能够从字符串动态加载它,这将起作用,您必须指定完全限定名称,因为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);

答案 1 :(得分:1)

使用完全限定名称,因为可能尚未加载程序集:

object a = Type.GetType("System.Xml.XmlDocument, System.Xml", true);

答案 2 :(得分:1)

通常只需附加逗号和程序集名称即“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")