Обновление библиотеки DLL в папке bin производственного веб-сайта ASP.NET - PullRequest
12 голосов
/ 31 марта 2010

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

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

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

Ответы [ 3 ]

9 голосов
/ 31 марта 2010

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

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

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

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

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

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

1 голос
/ 31 марта 2010

Посмотрите на этот пост, возможно, это то, на что вы ссылаетесь. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку

0 голосов
/ 31 марта 2010

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

...