2012-04-13 38 views
1

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

ライブラリのライブラリは正常に動作し、実行可能ファイルのアセンブリへの参照が返されます問題。

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

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

私の質問は次のとおりです。方法GetEntryAssemblynullを返さないようにする方法はありますか?私は何らかの形で譲渡することができますか?

+1

新しいAppDomainでWPFアプリケーションを実行することはできますか? – Matten

+0

私はしようとしていますが、interopにいくつかの問題があります –

+0

ライブラリ開発者に連絡するのは、MSDNが 'GetEntryAssembly'がアンマネージコードから呼び出された場合に' null'を返すということです。 http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.100%29.aspx – Matten

答えて

1

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

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

+0

はい...それはそうです問題を解決するためにライブラリの開発者に連絡しようとしています –

+0

もう一つの "一時的"と "危険な"解決策は、ildasmコマンドを使用してプロンプトからMSILディスアセンブラを使用してステートメントを変更し、 ilasmコマンド)。それは動作しますが、それは最善の選択ではありません。 –

+1

一般的に、アセンブリの厳密な名前が失われ、そのアセンブリを参照する人が再コンパイルされ、おそらく巨大な連鎖反応を引き起こすため、簡単には機能しません。 – Zarat

関連する問題