Dll в мусорном ведре и в gac, какой из них используется?

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

Есть ли способ переопределить GAC с помощью DLL в папке /bin, чтобы протестировать новые функции перед их выпуском?

4 ответа

Решение

Если он имеет тот же номер версии, что и указанная DLL, GAC используется.

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

Если вы не хотите менять номер версии, вам не повезло.

Когда.NET загружает строго именованные сборки, сначала он пытается решить, какой номер версии использовать. Сначала он делает это по ссылке, затем ищет политики издателя, а затем ищет перенаправления привязки в файле конфигурации.

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

Если вы не меняете номер версии вашей строго названной сборки, .NET найдет оригинальную версию в GAC и перестанет искать. Обратите внимание, что, поскольку он останавливается, когда находит его, и потому что поиск в GAC является первым, указание кодовой базы для вашей сборки не принесет пользы, если вы также не укажете новый номер версии.

Я смог переопределить GAC с помощью сборки в папке \bin, используя <codebase> Элемент.

Указав <codebase version="1.2.3.4" href="/bin/MyAssembly.dll" /> в моем файле web.config я могу указать моему приложению использовать эту версию, а не версию, указанную в GAC.

Вы также можете посмотреть на <probing> Элемент для указания места сборки?

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

  • Если ваше приложение скомпилировано с версией 1.0.0.0 и 1.0.0.1 находится в GAC, то вы можете опустить.dll из вашего /bin.
  • Если ваше приложение скомпилировано с версией 1.0.0.1 и 1.0.0.0 находится в GAC, то вы ДОЛЖНЫ поместить.dll в ваш / bin, чтобы игнорировать GAC. Ошибка произойдет, если версия GAC старше требуемой версии вашего приложения, если вы не включите более новую версию в свой /bin.

Я надеюсь, что это правильно...

Информацию о привязке можно просмотреть в файле журнала с помощью средства просмотра журнала привязки сборки (Fuslogvw.exe), которое входит в комплект разработчика программного обеспечения Windows (SDK).

s

Другие вопросы по тегам