Было ли плохой практикой для приложения устанавливать стороннюю сборку в GAC, не спрашивая? - PullRequest
2 голосов
/ 20 июля 2009

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 20 июля 2009

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

Сборка должна быть помещена в папку приложения 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» Нашел, что довольно забавно ...

3 голосов
/ 20 июля 2009

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

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

...