1

サードパーティ ライブラリを使用して特定のタスクを実行する WPF アプリケーションがあります。このライブラリは、そのメソッドの 1 つでステートメントを実行しAssembly.GetEntryAssembly()ます。

(テスト用に .Net exe を実行して) デバッグで WPF アプリケーションを実行すると、ライブラリは正常に動作しAssembly.GetEntryAssembly()、実行可能ファイルのアセンブリへの参照を返しますが、実稼働環境では別の状況が発生し、いくつかの問題が発生します。

本番環境では、WPF アプリケーションは VB6 アプリケーションと統合され、プログラムはInteropFormLibrary;を使用して VB6 メニューから起動されます。この状況では、ライブラリは例外を発生させAssembly.GetEntryAssembly()ますnull(アセンブリに関連付けられた実行可能ファイルが見つからないため)。

dll私の問題は、利用可能なソースがなく、逆コンパイラと例外にあったメソッドの分析によって例外をスローするステートメントを見つけたため、ライブラリのコードを変更できないことです。

GetEntryAssembly今私の質問は: メソッドが返されないことを確認する方法はありnullますか? 何らかの方法で割り当てまたは「回避」できますか?

4

1 に答える 1

1

最も簡単な方法は、dll の開発者に、ネイティブ (VB6 や C/C++ など) プロセスでのホストをサポートするようにコードを修正してもらうことです。

そうは言っても、それが不可能な場合は、.NET exe に基づいて、.NET 側を別のプロセスでホストすることを試みることができます。VB6 相互運用を行っているので、おそらく既に COM 相互運用を使用しているので、アウトプロセス COM モデルに切り替えることができます。このようにして、.NET コンポーネントを .NET exe 内で実行し、エントリ ポイント アセンブリを持つことができます。私はすでに同様の理由でそれを行っており、私にとってはうまくいきました。

于 2012-04-13T09:19:22.020 に答える