次のコードは、「アセンブリから型 'System.Xml.XmlDocument' を読み込めませんでした」というエラーで失敗します。
object a = Type.GetType("System.Xml.XmlDocument", true);
XmlDocument が存在する System.Xml への参照があります。
私が間違っていることは何ですか?
次のコードは、「アセンブリから型 'System.Xml.XmlDocument' を読み込めませんでした」というエラーで失敗します。
object a = Type.GetType("System.Xml.XmlDocument", true);
XmlDocument が存在する System.Xml への参照があります。
私が間違っていることは何ですか?
文字列から動的にロードできるようにする必要がある場合、これは機能します。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);
通常は、コンマとアセンブリ名を追加するだけで取得できます (つまり、"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")
アセンブリがまだロードされていない可能性があるため、完全修飾名を使用します。
object a = Type.GetType("System.Xml.XmlDocument, System.Xml", true);