Проблема загрузки сборки .NET - PullRequest
0 голосов
/ 26 марта 2010

Я поддерживаю процесс сборки для нашего приложения, которое состоит из приложения ASP.Net, двух разных служб Win32 и других приложений, связанных с системным администратором.

Я хочу получить следующую конфигурацию, которая будет использоваться при отладке и развертывании.

libraires/    -- Contains shared assemblies used by all other apps.
web/          -- ASP.Net site
service1/     -- Win32 service 1 (seen under the service control manager)
service2/     -- Win32 service 2 
adminstuff/   -- Sysadmin / support stuff used for troubleshooting

Проблема в том, что сборка, проверяющая privatePath в app.config, не поддерживает относительные каталоги вне корня приложения. Т.е.: нельзя использовать ../libraries. Очень разочаровывает ...

Если я буду строго называть наши сборки, я мог бы использовать элемент конфигурации codeBase, который, кажется, поддерживает абсолютный путь, но вам нужно указать каждую сборку отдельно.

Я также пытался подключиться к событию AppDomain.AssemblyResolve, но я получаю FileNotFoundException из .Net Fusion, прежде чем я смогу даже зарегистрировать обработчик событий в Main ().

Мне не нравится идея регистрации сборок в GAC. Слишком много хлопот при развертывании / обновлении приложения.

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

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

Ваш подход вызывает наихудший вид DLL Ада. Обновление «библиотечной» сборки может привести к поломке всех непроверенных приложений без возможности восстановить их, позволив им использовать старую версию сборки. Вот почему CLR не поддерживает этот сценарий.

Вы перечислили все обычные обходные пути. Кроме одного: дайте каждому приложению свою собственную копию.

0 голосов
/ 26 марта 2010

В прошлом я использовал подход AppDomain.AssemblyResolve, и он работал довольно хорошо.Я хотел бы предложить попытаться выяснить, какая сборка вызывает исключение FileNotFound, как посмотреть, можете ли вы реорганизовать инициализацию приложения так, чтобы она не загружалась при этом.

...