1

以下代码因“无法从程序集中加载类型 'System.Xml.XmlDocument'”错误而失败:

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

我有对 XmlDocument 所在的 System.Xml 的引用。

知道我做错了什么吗?

4

3 回答 3

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);
于 2009-10-01T19:51:43.427 回答
1

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

object a = Type.GetType("System.Xml.XmlDocument, System.Xml", true);
于 2009-09-29T08:09:38.883 回答
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")
于 2010-07-08T18:59:05.500 回答