Исполняемый файл .NET не будет загружать сборки, на которые даны ссылки, при запуске из \\localhost\xyz

StackOverflow https://stackoverflow.com/questions/2160317

Вопрос

Мой исполняемый файл .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-сборки.

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top