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

Посмотрите на вашу ссылку. Это говорит "конкретная версия = правда"? Установите значение false, повторно опубликуйте свое приложение (вы должны сделать это один раз, потому что теперь ваше приложение все еще ищет сборку с определенным манифестом) и попробуйте снова.

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