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

通常は、コンマとアセンブリ名を追加するだけで取得できます (つまり、"Namespace.Type, Assembly")。ただし、System.Xml.dll のようにアセンブリに厳密な名前が付けられている場合は、"Namespace.Type, Assembly" だけでなく、アセンブリを識別するために必要な署名情報も返す Type.AssemblyQualifiedName プロパティを使用する必要があります。これは機能します:

var xmlDocType = Type.GetType("System.Xml.XmlDocument, System.Xml, "
    + "Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
于 2010-07-08T18:59:05.500 に答える
1

アセンブリがまだロードされていない可能性があるため、完全修飾名を使用します。

object a = Type.GetType("System.Xml.XmlDocument, System.Xml", true);
于 2009-09-29T08:09:38.883 に答える