Исполняемый файл .NET не загружает ссылочные сборки при запуске из \\ localhost \ xyz - PullRequest
6 голосов
/ 29 января 2010

Мой исполняемый файл .NET abc.exe ссылается на несколько сборок. Один из них называется xyz.core.exe. У меня возникают проблемы с тем, чтобы заставить его работать, когда он запускается из сетевого расположения, указанного через имя общего ресурса с путем, таким как \\localhost\xyz\abc.exe. Это прекрасно работает, если я подключаю букву сетевого диска с именем Z: на \\localhost\xyz и запускаю Z:\abc.exe.

.NET, похоже, запутался при попытке загрузить сборку xyz.core.exe из общего ресурса. Выдает исключение 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 ]

2 голосов
/ 04 февраля 2010

Я не могу объяснить «C: \ xyz \ xyz.core.dll» (кроме как из любопытства), но остальное - именно то, что я ожидал.

Кажется, все это связано с безопасностью доступа к коду. До недавнего времени вам приходилось использовать «caspol» для настройки CAS, чтобы позволить выполнить exe из любого типа сетевого ресурса. Это было изменено (либо .NET 3.5, либо .NET 3.5 SP1) так, что сопоставленные общие ресурсы ("f:" и т. Д.) do получают разрешение на выполнение, а общие ресурсы UNC - нет.

Вы можете использовать "caspol" для предоставления доступа к UNC (, как этот ), но IMO - гораздо лучший вариант для перехода к развертыванию ClickOnce. Это может все еще быть через общий сетевой ресурс, но оно включает дополнительную информацию публикации, которая позволяет среде выполнения смонтировать его. Я верю , его также можно использовать для развертывания таким образом, чтобы он работал в автономном режиме (когда сеть недоступна), но по возможности автоматически обновляюсь с общего ресурса. Я знаю, что это работает для развертывания http - я верю это работает для сети). Среда IDE представляет это под видом «опубликовать», и всего за 5 кликов сделано.

0 голосов
/ 02 февраля 2010

Я в замешательстве - если вы используете localhost, он должен перейти на локальный жесткий диск.

Вы пытаетесь переназначить localhost, чтобы он указывал в другом месте? Если это так, то это может быть причиной проблем - попробуйте использовать другое имя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...