6

私の.NET実行可能ファイルabc.exeはいくつかのアセンブリを参照しています。それらの1つはと呼ばれxyz.core.exeます。のようなパスを持つ共有名で指定されたネットワークの場所から起動しているときに、動作させるのに問題があります\\localhost\xyz\abc.exeZ:これは、に名前が付けられたネットワークドライブ文字をマウントし、\\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アセンブリへの参照と同じ種類のロードエラーが発生するためです。

この読み込みの問題の原因は何でしょうか?他の誰かがそのような状況に遭遇しましたか?

4

2 に答える 2

2

「C:\ xyz \ xyz.core.dll」(好奇心を除いて)を説明することはできませんが、残りはまさに私が期待するものです。

This seems all tied into code-access security. Until recently, you would need to use "caspol" to configure CAS to allow you to execute the exe from any type of network share. This was changed (either .NET 3.5 or .NET 3.5 SP1) such that mapped shares ("f:" etc) do get execute permission, but UNC shares do not.

You can use "caspol" to grant access to the UNC (like this), but IMO it is a far better option to switch to ClickOnce deployment. This can still be via a network share, but it includes additional publication information that lets the runtime mount it. I believe it can also be used to deploy such that it works offline (when the network is unavailable) but update automatically from the share when possible I know this works for http deployment - I believe it works for network). The IDE presents this under the guise of "publish", and it is about 5 clicks all done.

于 2010-02-03T21:39:54.110 に答える
0

私は混乱しています.localhostを使用すると、ローカルのハードドライブに移動するはずです.

ローカルホストを別の場所に再マップしようとしていますか? この場合、これが問題の原因である可能性があります - 別の名前を使用してみてください

于 2010-02-01T21:10:22.237 に答える