私の.NET実行可能ファイルabc.exe
はいくつかのアセンブリを参照しています。それらの1つはと呼ばれxyz.core.exe
ます。のようなパスを持つ共有名で指定されたネットワークの場所から起動しているときに、動作させるのに問題があります\\localhost\xyz\abc.exe
。Z:
これは、に名前が付けられたネットワークドライブ文字をマウントし、\\localhost\xyz
を起動した場合に正常に機能しますZ:\abc.exe
。
xyz.core.exe
共有からアセンブリをロードしようとすると、.NETが混乱するようです。System.IO.FileNotFoundException
次のフュージョンログ情報で例外をスローします。
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable \\localhost\xyz\abc.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = Workstation\arnaud
LOG: DisplayName = xyz.core, Version=2.5.2.1001, Culture=neutral, PublicKeyToken=...
(Fully-specified)
LOG: Appbase = file://localhost/xyz/
LOG: Initial PrivatePath = NULL
Calling assembly : abc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: xyz.core, Version=2.5.2.1001, Culture=neutral, PublicKeyToken=...
LOG: Attempting download of new URL file://localhost/xyz/xyz.core.DLL.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core/xyz.core.DLL.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core.EXE.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core/xyz.core.EXE.
Process Monitorを使用して別の角度からこれを見ると、次のパスを使用してローカルドライブにアクセスしようとする試みがいくつか見られます。
C:\xyz\xyz.core.dll
C:\xyz\xyz.core\xyz.core.dll
C:\xyz\xyz.core.exe
C:\xyz\xyz.core\xyz.core.exe
ローダーがネットワーク共有からのロードの意図を誤解し、代わり\\localhost
に使用するためにドロップしたかのように。C:
この問題はセキュリティ設定に関連していないようで(マシンでCASPOLをいじったことはありません)、実行可能ファイルを共有から開始できる.NET3.5SP1を使用しています。
また、同等のマップされたネットワークドライブ文字を使用してプログラムを起動すると、これがセキュリティの問題ではないことを確認できます。
この問題は、EXEアセンブリへの参照であるという事実とは関係ありません。これは、プレーンDLLアセンブリへの参照と同じ種類のロードエラーが発生するためです。
この読み込みの問題の原因は何でしょうか?他の誰かがそのような状況に遭遇しましたか?