Компилировать представления в ASP.NET MVC

558

Я хочу, чтобы задача msbuild компилировала представления, чтобы я мог видеть, есть ли ошибки времени компиляции во время ... компиляции. Любые идеи?

Джон Оксли
источник
1
Я не знаю, какой viewengine вы используете, но если вы используете Razor, вы можете проверить мой пост в блоге: <a href = " chrisvandesteeg.nl/2010/11/22/… your asp.net mvc Razor просматривает отдельную библиотеку </a>. Возможно, будет возможно использовать этот код и для других viewengines, но еще этого не делали и не проверяли
Крис ван де Стиг,

Ответы:

154

Честно говоря, я бы порекомендовал пакет RazorGenerator nuget . Таким образом, ваши представления получают .designer.csфайл, сгенерированный при их сохранении, и в дополнение к получению ошибок времени компиляции для ваших представлений, они также предварительно компилируются в сборку (= более быстрый прогрев), и Resharper также предоставляет некоторую дополнительную помощь.

Чтобы использовать это, включите пакет nuget RazorGenerator в свой проект ASP.NET MVC и установите расширение « Razor Generator » в разделе « Инструменты» → «Расширения и обновления» .

Мы используем это, и издержки на компиляцию при таком подходе намного меньше. Вдобавок ко всему, я бы, вероятно, порекомендовал .NET Demon от RedGate, что еще больше существенно снижает время компиляции.

Надеюсь это поможет.

Mirko
источник
1
Есть ли похожее решение для VS2012?
Даниэль
6
К сожалению, он поддерживает только C # и не поддерживает VB.Net
Ed DeGagne
3
@zoidbergi RazorGenerator работает с VS2012; при использовании RazorGenerator.Mvc и RazorGenerator.MsBuild: расширение не требуется. Смотрите запись в блоге на stacktoheap.com
Jeroen K
2
Может ли это использоваться только для поиска ошибок - или он заменяет механизм представления при развертывании приложения?
17
Я установил пакет nuget RazorGenerator и расширение Razor Generator. Ничего не изменилось в моем проекте. Файлы .designer.cs не появились. Я использую визуальную студию 2017 года.
Михаил Самтеладзе,
563

Из документа readme word doc для RC1 (не индексируется Google)

Шаг посткомпиляции компилятора ASP.NET

В настоящее время ошибки в файле представления не обнаруживаются до времени выполнения. Чтобы позволить вам обнаруживать эти ошибки во время компиляции, проекты ASP.NET MVC теперь включают свойство MvcBuildViews, которое по умолчанию отключено. Чтобы включить это свойство, откройте файл проекта и установите для свойства MvcBuildViews значение true, как показано в следующем примере:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MvcBuildViews>true</MvcBuildViews>
  </PropertyGroup>

Примечание. Включение этой функции увеличивает время сборки.

Вы можете обновить проекты, созданные в предыдущих выпусках MVC, чтобы включить проверку представлений во время сборки, выполнив следующие действия:

  1. Откройте файл проекта в текстовом редакторе.
  2. Добавьте следующий элемент под самый верхний <PropertyGroup>элемент: <MvcBuildViews>true</MvcBuildViews>
  3. В конце файла проекта раскомментируйте <Target Name="AfterBuild">элемент и измените его так, чтобы он соответствовал следующему:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
JarrettV
источник
27
Если это не сработает для вашего проекта, проверьте, нет ли где-нибудь в вашем файле проекта <MvcBuildViews> false </ MvcBuildViews>. Он переопределял новый элемент <MvcBuildViews>, который я добавил поверх него.
Адриан Григор
3
@mxmissile: Скотт Гатри порекомендовал добавить в ваше решение проект веб-развертывания, чтобы получить такую ​​поддержку в проектах веб-приложений: weblogs.asp.net/scottgu/archive/2006/09/22/…
- Ben Duguid
6
Убедитесь, что EnableUpdateable имеет значение false, иначе представления не будут предварительно скомпилированы. <EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/… )
Карл Хёрберг,
55
Почему, почему, почему ... нет сочетания клавиш для построения с представлениями или без них? МС почему?
Дариол
2
Это решение добавлено в инструменты MVC. stackoverflow.com/a/2670792/878612
Lko
50

Вы можете использовать aspnet_compiler для этого:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:\Path\To\Your\WebProject -f -errorstack C:\Where\To\Put\Compiled\Site

где " / Virtual / Application / Path / Or / Path / In / IIS / Metabase " выглядит примерно так: " / MyApp " или " / lm / w3svc2 / 1 / root / "

Также на MSDN есть задача AspNetCompiler , показывающая, как интегрировать aspnet_compiler с MSBuild:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
        />
    </Target>
</Project>
maxnk
источник
5
Это устарело, см. Выдержку из документа readme ниже.
JarrettV
1
Другой ответ описывает задачу проекта более подробно, но aspnet_compiler часть все еще правильно (и полезно на строительных агентов).
mlhDev
26

Кроме того, если вы используете Resharper, вы можете активировать Solution Wide Analysis, и он обнаружит любые ошибки компилятора, которые могут возникнуть в файлах aspx. Это то, что мы делаем ...

bh213
источник
4
Это правда, что это работает для файлов aspx, но анализ всего решения не включает файлы ascx (пользовательские элементы управления)
mookid8000
3
Я полагаю, что так и есть в R # 5, но это огромный ресурс для больших проектов (даже на моем домашнем компьютере емкостью 16 ГБ его не стоит использовать).
Андрей
3
@Andrew / @ mookid8000 - R # также будет отлавливать ошибки, которые не будут компилятором, такие как отсутствующие / неправильные представления и действия. R # немного замедлит работу вашего ПК (мне кажется, это нормально для большого проекта с 4 Гб оперативной памяти и многопоточным процессором), но я легко возвращаю время, затрачиваемое на его ожидание, и в результате я выполняю меньше операций с моим code as R # обеспечивает операции более высокого уровня, которые объединяют в себе множество шагов, которые мне нужно сделать, чтобы выполнить ту же задачу вручную. Ваш проект должен быть огромным!
Дрю Ноакс
5
Для больших проектов «немного замедлить работу ПК» - это преуменьшение. Моя сборочная машина имеет 16 ГБ ОЗУ и 8 ядер (2 Xeons), и это просто CRAWLS. Я чувствую, что R # просто не был создан для проектов нашего размера, хотя ... например, наше решение имеет ~ 30 проектов, пару миллионов LOC и много сотен просмотров. Я люблю R # в наших небольших проектах (например, несколько проектов и не более 50 просмотров), но в нашем большом мы всегда должны его отключать.
Звуковой сигнал
1
Это может работать, но бежать! Я включил это, думая, что мое решение было маленьким, и оно никогда не заканчивало «анализ» и съедало всю мою оперативную память и процессор. Мне понадобилось 15 минут, чтобы прийти в себя.
Emragins
11

В следующем выпуске ASP.NET MVC (будет выпущен в январе или около того) должна быть задача MSBuild, которая компилирует представления, так что вы можете подождать.

Посмотреть объявление

bh213
источник
6

Ответ, приведенный здесь, работает для некоторых версий MVC, но не для других.

Простое решение работало для MVC1, но при обновлении до MVC2 представления больше не компилировались. Это было связано с ошибкой в ​​файлах проекта сайта. Смотрите эту взломанную статью.

Смотрите это: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx

user1040323
источник
6

Построить> Выполнить анализ кода

Горячая клавиша: Alt+F11

Помогли мне ловить бритвенные ошибки.

Абу Абдулла
источник
2
Я проголосовал за этот ответ, потому что горячая клавиша действительно выявила ошибку Razor. Однако впоследствии я заметил, что это работает, только если у вас есть файл .cshtml, открытый в IDE.
Michael12345
1

Использование расширения Power Tools ( бесплатно ) для Visual Studio немного помогает . Конкретно Solution Error Visualizerособенность. При этом ошибки компиляции отмечаются визуально в обозревателе решений (в исходном файле, где обнаружена ошибка). Однако по какой-то причине эта функция не работает, как с другими ошибками где-либо еще в коде.

В представлениях MVC любые ошибки во время компиляции будут по-прежнему подчеркнуты красным в их соответствующих файлах .cs, но сигнализация этих ошибок не распространяется вверх в обозревателе решений (ни в коем случае, даже в исходном файле, в котором они содержатся).

Спасибо за BlueCloudsисправление моего предыдущего заявления.

Я только что сообщил об этом как о проблеме в проекте расширения github.

Veverke
источник
1
Я попробовал инструменты Power Tools. Но не ведет себя так, как здесь сказано. Ошибка при просмотре бритвы, но сборка прошла успешно. представления не отмечены или подчеркнуты красным или где-либо в дереве обозревателя решений.
Синие облака
2
@BlueClouds: вы правы. Я создал пример проекта и добавил ошибку времени компиляции в представление. Расширение подчеркнет строки с ошибками красным, но не распространит ошибку вверх в обозревателе решений. Исправляю то, что я изложил в ответе. Оставляю ответ здесь, так как он все еще немного помогает, хотя на самом деле не решает проблему эффективно.
Веверке