2016-05-18 3 views
0

静的メソッドを含むアセンブリBへの参照を持つアプリケーションAがあります。アセンブリBは、アプリケーションAと同じVisual Studioソリューションに含まれています。DLLをドラッグアンドドロップするとMissingMethodExceptionが発生する

私たちは、アプリケーションAのユーザーにプラグインの書き込みを許可します。 Visual Studioで新しいクラスライブラリソリューションを作成し、アプリケーションA用のNugetパッケージを取得し、プラグインソリューションで参照をアセンブリBに追加して、プラグインコードをコンパイルしてプラグインを構築します(現在)。

アプリAに

彼らのコードをコンパイルしたら、それを実行しているとき、彼らは自分のコードをデバッグすることができれば、それはいいだろうが、彼らは、コードだけでコンパイルする必要がある理由です彼らのプラグインを、テストする必要はありません。 、プラグインのDLLは共有に置かれ、他のチーム(私が知っている官僚主義者)に渡され、誰がそれをアプリケーションAのDLLの残りの部分に入れるのですか?

私は、プラグインDLLが、すべてのアプリケーションAのDLLで使用されているアセンブリB DLLを使用したいと考えています。

私は、アプリケーションAを実行すると、ActivatorクラスはプラグインDLLをピックアップしてインスタンスを正しく作成しますが、アセンブリBの静的メソッドの1つが呼び出されると、プラグインはMissingMethodExceptionをスローします。

私が試したこと: プラグインのソリューションは、作成してアプリケーションAのVisual Studioソリューション内でコンパイルすると間違いなく正常に動作します。

アプリケーションAはフレームワーク.Net 4.5を使用しています。アセンブリBはフレームワーク.Net 4.0を使用していますが、両方のフレームワークでプラグインを構築しようとしましたが、成功しませんでした。

プラグインソリューションのアセンブリBへの参照の「特定のバージョン」は、テストされたすべてのケースでfalseでした。

この問題の解決方法をすぐに歓迎するだけでなく、これらのプラグインを動作させる方法についてのより幅広いアーキテクチャ上の提案も歓迎します。重複した質問がある場合はお詫びします。見つけられませんでした。

答えて

2

「Dotpeek」を使用すると、dllを逆コンパイルし、メソッド定義が正確に一致するかどうかを確認できます。 dotnetライブラリを逆コンパイルするためのフリーソフトウェアです。 .pdbファイルにアクセスできない場合は、 "dotnet reflector"または "IL Spy"を使用することをお勧めします。これは、pdbファイルなしで逆コンパイルします。

また、出力dllではなく、Visual Studioでプロジェクトを参照していることを確認してください。次のように

+0

またはILSpy(これはフリーです) –

0

が、私は私の問題を解決するために管理:

をプラグインが唯一の直接国会Bの静的メソッドを使用しますが、これらの静的メソッドは、実際には、様々な他のアセンブリへの呼び出しの連鎖を作りました。

Install-Package -Id AppA -ProjectName Plugin 

そして、これがパッケージフォルダに最新AppAのをダウンロードして、AppAがのEVERY DLLへの参照を追加しました:代わりにちょうど私のプラグインに国会Bへの参照を追加するので

、私はNugetコマンドをしました。

これはコンパイルされましたが、今回はプラグインdllをAppAのbinフォルダにドラッグしたときに、プラグインコードが例外をスローせずに実行されました。

関連する問題