2017-11-24 7 views
0

の.Net 4.5.2および4.6.2、MSTestをユニットテスト:私は、データ・ファイル内の文字列としてクラス名を指定して「システム」オブジェクトを作成する必要があり、テストケースの目的のためにActivator.CreateInstanceを使用してシステムDLLからタイプをロードするには?

。私は実行時に必要な型だけを文字列の型名(おそらく完全修飾名)として認識します。

私は

  var assyName = "System"; //read from data file 
      var typeName = "System.Boolean"; //read from data file 
      var hndle = Activator.CreateInstance(assyName, typeName); 
      var obj = hndle.Unwrap(); 
      var t = obj.GetType(); 

のかなりオーソドックスなアプローチを試みたが、私は(上記のように).NETアセンブリを使用して、それをしようと、私は、自分のアセンブリから自分のタイプをロードしていた場合、この作品ながら、 アクティベータ行は、FileNotFound例外をスローします。私は、参照されたシステムアセンブリのコピーローカルプロパティをtrueに変更しようとしましたが、それは効果がないようです。私はまた、システムアセンブリへの完全なパスを指定してみました。

私は間違って何をしていますか(何も間違っていない場合)どうすれば私の目標を達成できますか?

答えて

1

データファイルが間違っています。

System.Booleanタイプは、System名前空間内の同じように多くの他のタイプではないSystemアセンブリそのデータファイルの特許請求の範囲において、mscorlibアセンブリに存在します。名前空間名とアセンブリ名の間には関係がありません。

どのアセンブリにその型のMSDNページの型が含まれているか確認できます。

たとえば、System.Uriは、System.dllですが、System.Booleanは、mscorlib.dllです。

+0

これは問題を解決しましたが、System.dllを読み込めなかったことを考えれば、その型を見つけられなかったのではないことがわかりません。 System.Uriタイプが必要な場合はどうすればいいですか?同様のAssembly.Load( "system dllへのパス")のように、var hndle = Activator.CreateInstance( "System"、 "System.Uri")がFileNotFound例外で失敗する –

+1

@NeilHaughton完全修飾名を使用する必要があります。 "System、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089"のようになります。 Uriにはまだ動作しませんが、Uriにはパラメータのないコンストラクタがないためです。 – Evk

+0

ok、アドバイスありがとう –

関連する問題