2

生成された混合モード プロセスに起因するマネージド アセンブリ ロードの問題が発生しています。詳細については、以下を参照してください。BinPath と ExecutablePath が同じではない 2 つの有効なパスであるとします。

BinPath で開始された Web アプリがあり、次の ProcessStartInfo を使用してプロセスを作成します。

new ProcessStartInfo()
{
    FileName = ExecutablePath + "PerformanceRunner.exe",
    WorkingDirectory = ExecutablePath ,
    UseShellExecute = true                
};

次に、PerformanceRunner.exe は、ExecutablePath に存在するいくつかのアンマネージ DLL を正常にロードします (これは、VS の [モジュール] ウィンドウで確認できます)。次に、同じく ExecutablePath にあるマネージ アセンブリを読み込もうとしますが、これは失敗します。これのフュージョン ログは次のとおりです。BinPath は "G:\TOPSS\TOPSS New\Common\Service\Bin" であり、マネージド アセンブリは TPSSCDQ.dll であることに注意してください。TPSSCDQ は ExecutablePath にあります。


* アセンブリ バインダー ログ エントリ (11/29/2012 @ 4:16:11 PM) *

操作に失敗しました。バインド結果: hr = 0x80070002。システムは、指定されたファイルを見つけることができません。

アセンブリ マネージャーの読み込み元: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 実行可能ファイルの下で実行 G:\TOPSS\TOPSS New\Common\Service\Bin\PerformanceRunner.exe


=== プレバインド状態情報 ===

LOG : ユーザー = CORP\lbhra

LOG : DisplayName = TpssCDQ、Version=1.0.4612.26218、Culture=neutral、PublicKeyToken=null (完全指定)

LOG : Appbase = file:///G:/TOPSS/TOPSS New/Common/Service/Bin/

LOG : 初期 PrivatePath = NULL

LOG : 動的ベース = NULL

LOG : キャッシュ ベース = NULL

LOG : AppName = PerformanceRunner.exe

呼び出しアセンブリ : (不明)。

===

LOG : このバインドは、デフォルトのロード コンテキストで開始されます。

LOG : アプリケーション構成ファイルが見つかりません。

LOG : ホスト構成ファイルの使用:

LOG : C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config のマシン構成ファイルを使用します。

LOG : 現時点ではポリシーが参照に適用されていません (プライベート、カスタム、部分、または場所に基づくアセンブリ バインド)。

LOG : 新しい URL ファイル:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.DLL のダウンロードを試みています。

LOG : 新しい URL ファイルのダウンロードを試みています:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.DLL。

LOG : 新しい URL ファイル:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.EXE のダウンロードを試みています。

LOG : 新しい URL ファイルのダウンロードを試みています:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.EXE.

LOG : すべてのプローブ URL が試行され、失敗しました。


PrivatePath、Appbase、または Dynamicbase が何であるかを完全には理解していませんが、これらのパスの少なくとも 1 つが作業ディレクトリ (ExecutablePath) であるべきではありませんか? GetCurrentDirectory を使用して、作業ディレクトリが正しく設定されていることを確認しました。私はかなり混乱しているので、これを手に入れていただければ幸いです。

4

1 に答える 1

0

そうです、実行可能ファイルが保存されているルート フォルダーを検索する必要があります。作業ディレクトリは見えませんが、この場合、これらのパスは同じであることは理解しています。エラーメッセージを見ると、APPBASE正しく設定されているので、正しい場所を探していると思いますが、他の理由で見つけられません。

http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.90).aspx

その他の確認事項:

  • アプリ/マシン構成ファイルにアセンブリ読み込みのヒントはありますか?
  • マネージ DLL は正しいプラットフォーム用にビルドされていますか?
  • マネージ DLL の名前がまったく変更されていますか? ファイル名はマニフェストと一致していますか?
  • すべてのマネージ DLL の依存関係は同じ場所に格納されていますか?

また、このアセンブリをどのようにロードしていますか? プロジェクトの参照としてリストされていますか、それとも Assembly.Load (または同様のもの) を呼び出していますか?

于 2012-11-30T08:36:58.440 に答える