2017-02-07 5 views
3

Я использовал инструмент публикации веб-публикаций для публикации моего приложения MVC 5 в прошлом без предварительной компиляции в прошлом. В рамках моих усилий по сокращению начального времени загрузки для каждой страницы я изменил настройки публикации, как показано ниже, чтобы предварительно скомпилировать приложение во время процесса публикации. Внезапно невероятно надежная публикация, к которой я привыкла, стала кошмаром.ASP.NET MVC 5 публикует прекомпиляционные проблемы

  • Мое понимание «Объединить все выходы в один узел» будет означать, что все мои .cshtml страницы будут компилируются вместе в Dashboard.Precompiled.dll, который получил бы развернут на IIS. Это было не так - когда я могу заставить публикацию работать, она создает файл .complied для каждого файла .cshtml в моем проекте и не выполняет слияния.

  • Основная проблема сейчас в том, что .compiled генерируются только некоторое время. Когда я смотрю в каталоге obj\Debug\AspnetCompileMerge\TempBuildDir\bin, нет .compiled файлов, а не Dashboard.Precompiled.dll.

Я попытался перезапустить Visual Studio, очистка раствора и восстановление, предварительный просмотр vs. не предпросмотра изменения перед публикацией, создавая совершенно новый опубликовать профиль, и возился с передовыми настройками прекомпиляции снова и снова. Обычно через 30 минут после этого я могу получить файлы .precompiled для генерации и публикации, однако я не смог определить, что заставило его работать правильно в это время. В следующий раз, когда я отправлю и опубликую без изменения настроек, он перестанет работать снова. Проблема возникает при использовании VS2015 или VS2017RC.

Может ли кто-нибудь помочь мне указать мне в правильном направлении? Я уже много времени погружаюсь в это, и просто чувствую, что сейчас собираюсь в кругах.

Спасибо!

EDIT Я присмотрелся на выходе сборки и обнаружил, что вызов aspnet_compiler.exe был выполнен со следующими параметрами:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v/-p C:\Users\steve\Source\Dashboard\master\src\Agility.Web\obj\Staging\AspnetCompileMerge\Source -d C:\Users\steve\Source\Dashboard\master\src\Agility.Web\obj\Staging\AspnetCompileMerge\TempBuildDir

Когда я запускаю эту команду непосредственно из команды line, no .compiled файлы создаются в TempBuildDir\bin.

enter image description here

+0

имеет изменение конфигурации решения в режиме выпуска? – MMK

+0

Я пробовал это раньше, хотя в настоящее время я публикую тестовую среду, поэтому я использую конфигурацию отладки. Будет ли изменение режима выпуска каким-то образом повлиять на выход компилятора aspnet? – ChandlerPelhams

+0

Опубликован ли ваш web.config? – MMK

ответ

4

Пожалуйста, попробуйте следующие шаги.

1. Измените конфигурацию решения на режим выпуска.

2. Убедитесь, что web.config публикуется.

3. Проверьте свойства файла web.config и посмотрите, установлено ли для параметра «Действие для сборки» значение «Нет», если оно установлено в «Содержание». и снова запустите команду.

4. Изменить DashBoard.Precomiled.dll на DashBoard.Precomiled only.

5. Установите флажок Обработать как библиотечный компонент.

Более подробно об опции посещения ASP.NET Compilation Tool (Aspnet_compiler.exe)

Благодаря

3

Visual Studio использует ASP.NET компиляции и приспособлениеASP.NET слияния инструмент которые являются Aspnet_compiler.exe и Aspnet_merge.exe для компиляции приложения ASP.NET.

За кулисами VS использует эти 2 инструмента для компиляции проектов веб-приложений. Кроме того, вы можете вызывать эти 2 инструмента из командной строки.

Вы можете найти эти 2 файла, перейдя по этому каталогу: %WINDIR%\Microsoft.NET\Framework\v4.0.30319 (или в любую версию рамки, которую вы используете). Вы можете использовать эти инструменты для компиляции приложений ASP.NET. Чтобы узнать больше обо всех вариантах этих 2-х инструментов, пожалуйста, прочитайте эти ссылки: Aspnet_compiler.exe и Aspnet_merge.exe

Моя рекомендация об определении вопроса:

  • перезапуска Visual Studio
  • Clean Rebuild ваше решение
  • Вы должны ввести только название сборки без .dll (in your example Dashboard.Precompiled.dll should be just Dashboard.Precompiled)
  • (вы можете подумать) Перезагрузка ваша машина

Пожалуйста, прочитайте больше о настройках Advanced PreCompile на этом link, я вставляя здесь также опции:

Разрешить предкомпилированного сайт обновляемым - Эта установка соответствует - u для команды aspnet_compiler.exe. Если вы выберете эту опцию, страницы и пользовательские элементы управления (файлы .aspx, .ascx и .master) будут скопированы как есть в целевую папку и могут быть обновлены в виде текстовых файлов без перекомпиляции проекта. В противном случае HTML-разметка для страниц и пользовательских элементов управления удаляется и компилируется в вывод сборки.

Исправить информацию об отладке - Этот параметр соответствует опции -d команды aspnet_compiler.exe.

Не слить - Этот параметр не запускает aspnet_merge.exe и не использует параметр -fixednames команды aspnet_compiler.exe.

Не сливайте. Создайте отдельную сборку для каждой страницы и управления - Этот параметр не запускает aspnet_merge.exe. Вместо этого он использует параметр -fixednames команды aspnet_compiler.exe. Этот параметр полезен, если вы хотите сделать подробные обновления вашего развернутого веб-сайта. Однако компиляция с параметром -fixednames отключает оптимизацию пакетов компилятора и может привести к увеличению времени компиляции для крупных веб-сайтов.

Объединить все выходы с одной сборкой - Этот параметр эквивалентен опции -o assemblyname команды aspnet_merge.exe.

Рассматривать как компонент библиотеки (удалить файл App_Code.com) - Этот параметр соответствует опции -r команды aspnet_merge.exe. Выбор этого параметра позволяет добавить сборку проекта App_Code.dll в папку Bin другого веб-сайта без конфликта с сборкой App_Code.dll на другом веб-сайте. Это полезно для создания библиотеки .ascx управления

Merge каждого отдельного выхода папки для своей собственной сборки - этот параметр соответствует -prefix опции prefixname команды aspnet_merge.exe. Этот параметр позволяет обновлять веб-сайт на уровне папки, а не обновлять все приложение. Вы можете использовать префикс необязательной сборки, чтобы указать префикс, который будет предварительно привязан ко всем сгенерированным именам сборки. Например, если вы укажете префикс MyCompany, имя станет MyCompany.SubfolderName.

Слияние всех страниц и управляющих выходов с одной сборкой - Этот параметр соответствует параметру -w assemblyname команды aspnet_merge.exe. Эта опция позволяет вам обновлять элементы пользовательского интерфейса отдельно от обновления другого кода. Специальные папки, такие как App_Code, App_WebReferences и т. Д., Скомпилированы в отдельную сборку. Укажите имя целевой сборки в поле «Название сборки».

+0

, пожалуйста, взгляните на комментарии. – MMK

+0

О, круто! Я просто указал параметры для параметров предварительной компиляции в VS, потому что OP неправильно понимал значение слияния для диалогового окна. Это не соревнование за ваш ответ, это просто дополнительные предметы для изучения. В любом случае, это так, потому что, правильно? Для «нас» учиться? – jomsk1e

+0

отлично, но он знает, как работают эти параметры и настройки. Он просто потерял некоторые из них, когда конфигурировал проект для прекомпиляции. – MMK

 Смежные вопросы

  • Нет связанных вопросов^_^