Ошибка ссылки на сборку на сайте с такой же подписью - PullRequest
2 голосов
/ 19 декабря 2008

У меня есть несколько веб-сайтов ASP.NET 2.0 на IIS 6 и Windows Server 2003. Каждый сайт ссылается на некоторые библиотеки DLL: дизайн, логика и так далее. Каждый сайт находится в отдельном ApplicationPool с конфигурацией по умолчанию, касающейся методов переработки.

Каждая DLL имеет строгое имя (не задерживается) и имеет версию, которая никогда не изменяется (2.0.0.0), все DLL помещаются в GAC.

После того, как я обновил DLL в GAC (т.е. MyLibrary.dll), которая изменилась в чем-то (метод, классы ..) для использования на веб-сайте «A», и после переработки только пул приложений «A» , когда я пытаюсь получить доступ к веб-сайту "B", который ссылается на ту же DLL, я получаю общую ошибку об этой DLL:

Манифест найденной сборки определение не соответствует сборке ссылка. (Исключение из HRESULT: 0x80131040)

Конечно, в DLL ничего не изменилось, кроме кода, той же сильной клавиши, той же версии, культуры. Конечно, ошибка исчезает при переработке пула приложений "B".

Что может вызвать странное, СЛУЧАЙНОЕ (я должен сказать!) Поведение? Есть что-то еще, например, хеширование, которое используется для сравнения сборок?

Добавление

  • Perpetualcoder спросил меня, как ссылки на библиотеки DLL, если с полным именем, я думаю, что это, здесь строка web.config:

сборка = "MyNamespace.MyComponent, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = 1234567890ASDFGH "

Ответы [ 2 ]

0 голосов
/ 19 декабря 2008

Франс, это процедура, которую я понимаю, и, конечно, это может быть способ развертывания, но я не понимаю, почему даже если полное квалифицированное имя верное, возникает ошибка. Я видел в манифесте DLL, есть спецификация алгоритма хеширования. ASP.NET выполняет сравнение хэширования по сравнению с DLL?

Что я имею в виду в нескольких словах: IIS / ASP.NET обнаруживает, что DDL "A" не соответствует хешу DLL "B", но триплет "ключ, культура, версия" - то же самое, поэтому он не обновить вместо того, чтобы выдать ошибку web.config?

0 голосов
/ 19 декабря 2008

Я повторяю себя: не храните файлы в GAC, если в этом нет особой необходимости. asp.net копирует dll в временную папку и запускает сайт оттуда, это может быть несоответствие контрольных сумм между загруженной dll и той, что находится во временной папке.

Вы должны хранить dll вашего сайта локально по отношению к сайтам в папке bin. Это даст вам больше гибкости, и вы не навредите приложению B, обновив dll для приложения A. Кроме того, вы получите развертывание xcopy за небольшую цену, отдав немного дискового пространства.

...