Было ли плохой практикой, чтобы приложение устанавливало стороннюю сборку в GAC без запроса?

Сценарий. У нас есть сервер, на котором размещено несколько веб-сайтов ASP.NET. Несколько дней назад довольно много таких сайтов «сломались» со следующей ошибкой:

Предупреждение 44 Не удалось разрешить эту ссылку. Не удалось найти сборку «AjaxControlToolkit, версия = 1.0.10920.32880, культура = нейтральная, PublicKeyToken = 28f01b0e84b6d53e, процессорная архитектура = MSIL». Убедитесь, что сборка существует на диске. Если эта ссылка требуется для вашего кода, вы можете получить ошибки компиляции.

После некоторого расследования выяснилось, что на сервере была установлена ​​(коммерческая) система CMS, которая добавила сторонний AjaxControlTookit в глобальный кэш сборок. Не спрашивал, а просто добавил (на самом деле добавил две версии: 1.0.10618.0 и 3.0.20229.0). Это вызывало конфликты разрешения, поскольку рассматриваемые веб-сайты ссылались на другую версию Toolkit в своем локальном каталоге /Bin.

Итак, я предполагаю, что мой вопрос таков: считаете ли вы, что для этой CMS было приемлемо устанавливать эти сборки в GAC (особенно с учетом того, что сборки были библиотеками с открытым исходным кодом, а не их собственными)? Или веб-сайты, которые «сломались», виноваты в том, что каким-то образом не были более явными в том, как они ссылались на сборки в папке / Bin? Спасибо.


person Dan Diplo    schedule 20.07.2009    source источник
comment
Насколько я знаю, если в GAC есть экземпляр dll, другие ваши сайты НЕ МОГУТ принудительно ссылаться на экземпляр в своей папке /Bin.   -  person Benjol    schedule 23.07.2009


Ответы (2)


Нет, я не думаю, что это приемлемо.

Сборку надо было положить в папку bin приложения.

Установщик должен вносить изменения как можно более локально.

Во многих случаях лучший установщик вообще не установщик. По крайней мере, для серверных приложений. Я бы предпочел иметь zip-файл + INSTALL.txt со словами:

  1. Системные требования: IIS, ASP.NET 2.0, SQL Server 2005
  2. Создать новый пустой каталог
  3. Разархивировать содержимое в каталог
  4. Создайте виртуальный каталог IIS, указывающий на каталог
  5. Запустите файл foo.sql для создания базы данных
  6. Настройте строку подключения к базе данных в web.config

Однажды я видел, как установщик Windows описывался как «воинствующее правое крыло реестра Windows». Нашел это весьма забавным...

person codeape    schedule 20.07.2009
comment
Боже, я не могу не согласиться. Люди, создающие установочные пакеты cough kentico cough sitecore cough для CMS, просто смехотворны. Dll в GAC заставит меня немедленно вычеркнуть ее из списка. - person Sleeper Smith; 18.02.2013

Если бы не было четко задокументировано, что установка помещает сборки в GAC, то я бы обвинил разработчиков/упаковщиков программного обеспечения. Если бы это было четко задокументировано, я бы обвинил системных администраторов, которые устанавливали программное обеспечение, в непонимании последствий установки.

В большинстве случаев я бы подумал, что установка в GAC была бы ненужной — и я лично этого не делаю — но я полагаю, что могут быть некоторые ситуации, в которых это кажется наиболее разумным решением. Также возможно, что они просто упаковали другой установщик со своим, как самый простой способ убедиться, что их зависимости были выполнены. Не идеальное, но вполне понятное решение, если они рассчитывают, что программное обеспечение будет нормально установлено на автономных серверах.

person tvanfosson    schedule 20.07.2009