DLL в обе корзину и GAC, который привыкает?


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

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

4 66

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.конфигурационный файл я могу сказать моему приложению использовать эту версию, а не версию, указанную в 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