Обновление DLL в папке bin производственного веб-сайта ASP.NET
Я хочу обновить библиотеку классов (один файл DLL) в производственном веб-приложении. Это веб-приложение предварительно скомпилировано (опубликовано). Я прочитал ответ по Stackru (извините, кажется, больше его не могу найти, потому что функция поиска работает не очень хорошо), что заставило меня поверить, что я могу просто вставить новую DLL в папку bin, и она будет выбрана без проблем (это может привести к перезагрузке WP, что вполне устраивает меня, потому что мы не используем состояние сеанса InProc).
Однако, когда я попытался это сделать, мой сайт взрывается и выдает исключение FileLoadException, в котором говорится, что определение манифеста сборки не соответствует ссылке на сборку. Что в этом мире? Обновление DLL в Visual Studio и повторное развертывание всего сайта работает просто отлично, но это огромная боль в тылу. Какой смысл иметь отдельную DLL, если вам нужно повторно развернуть весь сайт для реализации каких-либо изменений?
Вот вопрос: как я могу обновить DLL на рабочем веб-сайте, не ломая приложение и не повторно развертывая все файлы?
3 ответа
Следует помнить, что существуют веб-сайты и веб-приложения, если рассматривать Visual Studio и ASPNET.
На веб-сайтах обычно все файлы aspx и vb публикуются на работающем сервере, и ASPNET Worker Process перекомпилирует приложение каждый раз перед презентацией.
На другом конце находится веб-приложение, где весь ваш код за файлами скомпилирован в один файл DLL, и вы просто развертываете страницы aspx и папку bin с файлом DLL для производства.
Существует также "гибрид", известный как " Предварительно скомпилированные веб-сайты" (см. Ссылку для официального обзора MSDN), где у вас нет единого макета DLL веб-приложения, но вся работа по компиляции веб-сайта выполняется для вы. Есть несколько "режимов" для этого в зависимости от ваших потребностей.
Мне кажется, что ваша ошибка вызвана тем, что ваш сайт настроен как веб-сайт с какой-то предварительной компиляцией. Использование предварительно скомпилированной модели немного более "строго" в том смысле, что предполагается наличие определенных файлов / подписей. Наличие обновленной версии файла DLL приводит к разрыву, так как прекомпиляция требует имя и версию файла.
Если возможно, лучшим вариантом будет преобразование в веб-приложение, поскольку вы можете без проблем добавить дополнительные библиотеки DLL в рабочий процесс. В противном случае, посмотрите на эту матрицу, чтобы увидеть, какая форма прекомпиляции вам нужна для вашего приложения.
Look at this SO post, might be what you are referring to. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку
Посмотрите на вашу ссылку. Это говорит "конкретная версия = правда"? Установите значение false, повторно опубликуйте свое приложение (вы должны сделать это один раз, потому что теперь ваше приложение все еще ищет сборку с определенным манифестом) и попробуйте снова.