レベル:ConsoleApp.exeで定義されている特定のタイプを参照する任意のDLLで処理を実行できるコンソールアプリケーション(ConsoleApp.exeなど)を作成しようとしています。共通DLLを参照するアセンブリ間で参照型を渡すにはどうすればよいですか?
arbirary DLLによって参照されることが意図されたタイプ(ConsoleClassなど)を含むConsoleApp用のコンパニオンDLLが必要であると誤って判断しました。これを解消するには、私がもっと良い方法を知らないうちに、ConsoleAppソリューションに2つのプロジェクトがあります.1つはクラスライブラリ(Proving ConsoleApp.dll)です。もう1つはクラスライブラリプロジェクトを参照するコンソールアプリケーションです。
これで、ConsoleApp.dllを別のソリューション(例:OtherApp.dll)内の比較的無関係の別のプロジェクトにコピーし、参照して、ConsoleClassインスタンスをパラメータとして使用するメソッドを書き込むことができました。
ここで、このOtherApp.dllを任意に処理するために、ConsoleApp.exeがそのアセンブリを読み込み、そのアセンブリ内の適切なクラスをインスタンス化し、そのインスタンスに対して適切なメソッドを呼び出します。以下の関連行は、私がこれをやっている様子をうまく説明してくれます。
Assembly.LoadFrom(path_to_OtherApp_dll);
...
var x = (dynamic)Activator.CreateInstance(type_inside_OtherApp_dll);
...
var instance = new ConsoleClass();
x.some_method_call(instance);
最終的にこれは失敗します。これは、2つのプロジェクト(ConsoleApp.exeとOtherApp.dll)がConsoleClassを定義するために同じDLLを参照しているにもかかわらず、ランタイムはそれらが異なるタイプであると考えているためです。
どのような考えですか?
'(動的)Activator.CreateInstance(T)'は意味がありません。 '(T)Activator.CreateInstance(T)'( 'T:= type_inside_OtherApp_dll') – stakx
実際に、私はあなたがインスタンス化している型を知っているので、 。 'x.some_method_call(INSTANCE)'でコンパイル時にエラーが発生した場合は、間違った型のオブジェクトを渡していることがわかります。 – stakx
私は個人的に私が文字通りのクラス名を知らない型にキャストする方法を知らないので、私は動的なものとしてキャストします。私は型(type_inside_OtherApp_dll)を持っていますが、それはリフレクションを通して集められました(私が以前は言及しなかったもの)。 ConsoleAppはコンパイル時にOtherApp.dllを参照することができないため、文字通り自分のコードにtype_inside_OtherApp_dllとしてキャストできません。 –