13

暗号化アセンブリを動的にロードしようとしていますがGetType、正しいクラス名を使用しているにもかかわらず、null が返されます。コードは次のとおりです。

//Load encryption assembly.
Assembly encryptionAssembly = Assembly.LoadFrom("Encryption.dll");
foreach(Type t in encryptionAssembly.GetTypes())
   {
      MessageBox.Show(t.Name.ToString());
      // This shows "Encryption"
   }
Type encryptionClass = encryptionAssembly.GetType("Encryption");
// But this returns null

私はこれで少し頭が痛いです。クラスは公開されており、スペルは間違いなく正しいです。

前もって感謝します。

4

5 に答える 5

17

ここ

MessageBox.Show(t.FullName.ToString()); //FULLNAME

タイプの を出力し、それFullNameを使用 FullNameてアセンブリからタイプを取得します。

于 2012-05-28T10:29:40.857 に答える
11

タイプの完全な名前空間を指定する必要があります。次に例を示します。

encryptionAssembly.GetType("My.Namespace.Encryption")

を使って知ることができます。t.FullName

于 2012-05-28T10:28:01.140 に答える
5

暗号化タイプ (namespace.classname) の完全な名前を指定してみてください

于 2012-05-28T10:27:37.053 に答える
2

実行時のアセンブリの完全修飾名はわかりませんでしたが、アセンブリの ExportedTypes からクラス名のみを使用して型を取得できました。たとえば、「ClassName」のエクスポート タイプを取得するには、次のようにします。

var assembly = Assembly.LoadFile(dllPath);
var types = assembly.ExportedTypes;
if(types != null)
{
    var type = types.Where(x => x.Name == "ClassName").FirstOrDefault();
}

「ClassName」という同じ名前の型が複数ある場合、これは最初の型のみを取得しますが、これはロードしている dll の安全な解決策です。

于 2016-04-07T15:20:39.370 に答える
0

私の場合、プロジェクトの file/.cs ファイルがありませんでした。不足しているcsファイルを追加したところ、魅力的に機能しました。ProjectA という名前の cs プロジェクトがあります。その中で、コードは完全なクラス名 ProjectA.ClassA を探しています。このエラーが発生したときに ProjectA に移動したところ、マージの問題により ClassA.cs が見つからないことがわかりました。ClassA.cs を ProjectA に追加/インクルードしたところ、問題なく動作しました。

于 2016-08-11T18:22:31.970 に答える