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

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

.NET, кажется, запутался при попытке загрузить xyz.core.exe сборка из общего ресурса. Он бросает!--9--> исключение с следующая информация журнала fusion:

Assembly manager loaded from:  C:WindowsMicrosoft.NETFrameworkv2.0.50727mscorwks.dll
Running under executable  localhostxyzabc.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Workstationarnaud
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:WindowsMicrosoft.NETFrameworkv2.0.50727configmachine.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:xyzxyz.core.dll
C:xyzxyz.corexyz.core.dll
C:xyzxyz.core.exe
C:xyzxyz.corexyz.core.exe

как будто загрузчик неправильно понял намерение загрузки из сетевого ресурса и сбросил localhost использовать . Проблема, похоже, не связана с настройками безопасности (я никогда не возился с CASPOL на моей машине), и я использую .NET 3.5 SP1, который позволяет запускать исполняемые файлы из общего ресурса.

и тот факт, что запуск программы через эквивалентную букву подключенного сетевого диска работает, должен подтвердить, что это не проблема безопасности.

проблема не связана с тем, что ссылка также относится к сборке EXE, так как она создает такие же ошибки загрузки со ссылками на простые сборки DLL.

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

2 ответов


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

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

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


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

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