2009-09-29 1 views
1

Следующий код выдает ошибку «Не удалось загрузить тип„System.Xml.XmlDocument“из сборки»:Почему я не могу динамически построить файл System.Xml.XmlDocument?

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

У меня есть ссылка на System.Xml, в котором находится XmlDocument.

Любая идея, что я делаю неправильно?

ответ

2

Если вам нужно, чтобы иметь возможность динамически загружать его из строки, это будет работать, вы должны полностью указать потому что в GAC возможно несколько версий этой DLL. Замените версию = 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

Используйте полное имя, так как сборка может быть еще не загружены:

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

Это не удается. Свойство AssemblyQualifiedName для System.XmlDocument требует больше, чем просто comma + System.Xml, возможно, потому, что оно сильно названо. Вам нужно использовать Type.GetType («System.Xml.XmlDocument, System.Xml, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089») –

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") 
+0

-1: Я не вижу, как это отличается от принятого ответа , –

+1

С моим ответом вы все еще используете Type.GetType и считаете, что сборка уже указана. И FYI у меня была точно такая же проблема, и принятый ответ не был моим решением. Это было. –