从\\ localhost \ xyz启动时,.NET可执行文件不会加载引用的程序集

时间:2010-01-29 06:35:30

标签: c# networking load assembly-resolution fusion

我的.NET可执行文件abc.exe引用了几个程序集。其中一个被称为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混淆),而且我使用的是.NET 3.5 SP1,它允许从共享中启动可执行文件。

通过等效的映射网络驱动器函数启动程序的事实应该确认这不是安全问题。

问题与引用也是EXE程序集的事实无关,因为它会引用普通DLL程序集产生相同类型的加载错误。

任何可能导致此装载问题的想法?还有其他人遇到过这样的情况吗?

2 个答案:

答案 0 :(得分:2)

我无法解释“C:\ xyz \ xyz.core.dll”(除了好奇心),但其余的正是我所期待的。

这似乎都与代码访问安全性有关。直到最近,您还需要使用“caspol”来配置CAS,以允许您从任何类型的网络共享执行 exe。这已更改(.NET 3.5或.NET 3.5 SP1),以便映射共享(“f:”等)执行获得执行权限,但UNC共享不会。

可以使用“caspol”授予对UNC(like this)的访问权限,但IMO是切换到ClickOnce部署的更好选择。这可以仍然通过网络共享,但它包含允许运行时安装它的其他发布信息。我相信它也可用于部署,使其脱机工作(当网络不可用时),但在可能的情况下自动从共享更新我知道这适用于http部署 - 我相信< / em>它适用于网络)。 IDE以“发布”为幌子呈现这一点,并且大约完成了5次点击。

答案 1 :(得分:0)

我很困惑 - 如果你使用localhost它应该去本地硬盘。

您是否尝试将localhost重新映射到其他位置?如果是这种情况,这可能是导致问题的原因 - 尝试使用不同的名称