Обновление библиотеки DLL в папке bin веб-сайта Production ASP.NET

Я хочу обновить библиотеку классов (один DLL файл) в веб-приложении для создания. Это веб-приложение предварительно скомпилировано (опубликовано). Я прочитал ответ на StackOverflow (извините, похоже, не может найти его больше, потому что функция поиска работает не очень хорошо), что привело меня к мысли, что я могу просто вставить новую DLL в папку bin, и она будет выбрана без проблем (это может привести к переработке WP, и это нормально, потому что мы не используем состояние сеанса InProc).

Однако, когда я это пробовал, мой сайт взрывается и дает исключение FileLoadException, что определение манифеста сборки не соответствует ссылке на сборку. Что это такое в мире?! Обновление библиотеки DLL в Visual Studio и повторное развертывание всего сайта отлично работают, но это огромная боль в тылу. Какой смысл иметь отдельную DLL, если вам нужно повторно развернуть весь сайт для каких-либо изменений?

Вот вопрос: Как я могу обновить DLL на веб-сайте производителя, не нарушая приложение и не переустанавливая все файлы?

Ответ 1

Следует помнить, что существуют веб-сайты и веб-приложения, поскольку рассматриваются Visual Studio и ASPNET.

Веб-сайты обычно имеют все файлы aspx и vb, опубликованные на реальном сервере, и ASPNET Worker Process перекомпилирует приложение каждый раз перед представлением.

На другом конце веб-приложение, где весь ваш код за файлами скомпилирован до одного DLL файла, и вы просто развертываете свои страницы aspx и папку bin с файлом DLL для производства.

Существует также "гибрид", известный как " Предварительно скомпилированные веб-сайты" (см. ссылку для официального обзора MSDN) t иметь единую компоновку DLL для веб-приложения, но вся компиляция веб-сайта выполняется для вас. В зависимости от ваших потребностей существует несколько "режимов".

Мне кажется, что ваша ошибка вызвана тем, что ваш сайт настроен как веб-сайт с какой-то предварительной компиляцией. Использование предварительно скомпилированной модели является немного более "строгим", поскольку предполагает наличие определенных файлов/подписи. Наличие обновленной версии DLL файла вызывает перерыв, поскольку предварительная компиляция требует имени и версии файла.

Если возможно, лучше всего конвертировать в веб-приложение, так как вы можете добавить дополнительные DLL в производство без проблем. В противном случае просмотрите эту матрицу, чтобы узнать, какая форма предварительной компиляции вам нужна для вашего приложения.

Ответ 3

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