ToBeProcessed から継承するクラス RD_ToBeProcessed を含むアセンブリがあります。クラスは別々のアセンブリにあります。
createInstance を使用してオブジェクトをロードし、次のコードでキャストを試みます。
private Type tbpType = null;
public ToBeProcessed getToBeProcessedObject(string data)
{
// The data is passed in so that the fields are populated with the
// correct data.
if (tbpType==null){
Assembly assembly =
Assembly.LoadFrom("c:\\project\\RD_ToBeProcessed.dll");
tbpType = assembly.GetType("myNameSpace.RD_ToBeProcessed");
}
Object tbp = Activator.CreateInstance(tbpType,data);
// This line throws an error
return (ToBeProcessed)tbp;
}
これは、質問 .NET: Unable to cast object to interface it implementsの繰り返しですが、解決方法がわかりません。
スローされるエラーは
タイプ「myNameSpace.RD_ToBeProcessed」のオブジェクトをタイプ「myNameSpace.ToBeProcessed」にキャストできません。
受け入れられた回答は、問題がベース アセンブリの 2 つの異なるバージョンにあることを示していました。しかし、ILSpy と、アプリケーション ディレクトリ内の ToBeProcessed dll と、RD_ToBeProcessed レポートと同じディレクトリ内の dll の両方を使用しました。
ToBeProcessed、バージョン = 1.0.4336.31676、カルチャ = ニュートラル、PublicKeyToken = null
だから私は何が間違っているのか分かりません。ToBeProcessed をアプリとプラグインで使用されるインターフェイス (ItoBeProcessed) に変更する必要がありますか? 次に、アプリケーションによってまったく参照されない (プラグインによってのみ) ベースの ToBeProcessed クラスを保持する別のアセンブリがありますか?
編集: インターフェイス クラスを使用して問題を解決しました。何がうまくいかなかったのかはまだわかりませんが、Kolの答えは、理論的にはこれが正しく機能するはずだったことを示しています。