Публикация веб-приложения VS 2012 MVC завершается сбоем при установке предварительной компиляции

У меня есть веб-приложение MVC 5, которое я предпочел бы сэкономить время при запуске, предварительно скомпилировав его при публикации. Однако, когда я выбираю «Предварительно скомпилировать во время публикации», я получаю следующую ошибку:

Error   5082    Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' 
or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).
error ASPRUNTIME    0   0   USIS

В Web.Config есть перенаправление привязки для этой ссылки.

  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780CCD10D57B246" culture="neutral" />
    <bindingRedirect oldVersion="1.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>

Это строится и развертывается нормально, если у меня не отмечен этот параметр предварительной компиляции, и Интернет работает нормально без проблем. Я просто не могу публиковать с включенной опцией предварительной компиляции.

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

EDIT: я добился некоторого успеха. Я понял, что намеренно не развертывал файл Web.Config, чтобы разработчик случайно не повредил конфигурацию производственной среды, но оказалось, что сборка перед компиляцией копировала файлы во временное расположение, и без файла Web.Config. развернут, там не было файла Web.Config, что означает отсутствие переводов зависимостей.

Итак, теперь похоже, что мне придется развернуть Web.Config, если я хочу предварительно скомпилировать (я установил его действие сборки с «Содержание» на «Нет», и теперь я снова установил его .) Это означает, что мне нужно будет изучить преобразования Web.Config и т. д.

Спасибо, Грег


person Greg    schedule 12.02.2015    source источник


Ответы (2)


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

Лучший способ, который я нашел для исправления этой конкретной ошибки, — это удалить и переустановить проблемный пакет Nuget.

Просто зайдите в консоль диспетчера пакетов, убедитесь, что проект, вызвавший ошибку, выбран для «Проекта по умолчанию», а затем запустите:

> Uninstall-Package DotNetOpenAuth.Core -Force
> Install-Package DotNetOpenAuth.Core

Это должно решить проблему и позволить вашему сайту нормально публиковаться и работать, с предварительной компиляцией или без нее.

person Chris Pratt    schedule 12.02.2015
comment
Хороший совет, пожалуй, для большинства. Я обнаружил, что, не публикуя файл Web.config по личному выбору, он никогда не копировался во временное расположение, поэтому перенаправления привязки не выполнялись, и простое включение этого сделало предварительные компиляции успешными. - person Greg; 12.02.2015

Решение: оказалось, что, поскольку я не публиковал файл Web.config, перенаправления привязки не выполнялись. Решение состояло в том, чтобы изменить этот файл обратно на опубликованный (действие сборки с «Нет» на «Содержимое»), и тогда предварительная компиляция прошла успешно.

Для других с веб-сайтом MVC или ASP.NET, который работает медленно каждый раз при открытии новой страницы/представления, я бы рекомендовал попробовать эту функцию предварительной компиляции с публикацией. Он просто скрыт в параметрах файла в настройках публикации (VS 2012). Я выбрал предварительную компиляцию и сделал сайт не обновляемым, чтобы избежать компиляции динамического представления/страницы. См. дополнительную информацию: Что влияет ли новая опция предварительной компиляции во время публикации на приложения MVC4? .

Кроме того, чтобы передать правильные настройки и строки подключения в Live и Test, я начал использовать шаблоны перевода «Web.Release.config» и «Web.Debug.config». Они заменят строки Web.config только при развертывании. См. http://go.microsoft.com/fwlink/?LinkId=125889. Чтобы получить больше информации.

person Greg    schedule 12.02.2015
comment
Недавно у меня была еще одна проблема с предварительной компиляцией при публикации. Я получал CS1528, потому что представление имело ViewBag.En в строке кода. Ясно, что кто-то начал вводить что-то, что он никогда не заканчивал (и не проверял), но он строится, и другие страницы работают нормально локально, когда вы не пытаетесь предварительно скомпилировать представления... - person Greg; 20.03.2015
comment
Итак, если вы уже могли публиковать предварительно скомпилированные файлы ранее, и вдруг у них начинаются проблемы, учтите тот факт, что в ваших представлениях очень вероятны ошибки компиляции прекомпиляции при публикации. Вероятный виновник тогда, вероятно, находится в той же папке, что и последний предварительно скомпилированный элемент, или в следующей папке. - person Greg; 20.03.2015