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

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

20.12.2008 10:51:00
Я не знаю, какой viewengine вы используете, но если вы используете Razor, вы можете проверить мой пост в блоге: <a href = " chrisvandesteeg.nl/2010/11/22/… your asp.net mvc Razor просматривает отдельную dll </a> Должна быть возможность использовать этот код и для других viewengines, но еще не сделали и не протестировали это
Chris van de Steeg 23.11.2010 06:26:41
8 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

153
1.05.2018 12:23:47
Есть ли похожее решение для VS2012?
daniel 7.05.2013 12:22:42
К сожалению, он поддерживает только C # и не VB.Net
Ed DeGagne 26.07.2013 14:59:13
@zoidbergi RazorGenerator работает с VS2012; при использовании RazorGenerator.Mvc и RazorGenerator.MsBuild: расширение не требуется. Смотрите запись в блоге на stacktoheap.com
Jeroen K 1.08.2014 09:19:46
Может ли это использоваться только для поиска ошибок - или он заменяет механизм просмотра при развертывании приложения?
niico 7.11.2017 23:57:08
Я установил пакет Nazget RazorGenerator и расширение Razor Generator. Ничего не изменилось в моем проекте. Файлы .designer.cs не появились. Я использую визуальную студию 2017 года.
Michael Samteladze 19.12.2018 06:34:07

Вы можете использовать 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>
50
16.03.2018 12:32:32
Это устарело, см. Выдержку из документа readme ниже.
JarrettV 12.02.2009 20:00:34
Другой ответ описывает задачу проекта более подробно, но aspnet_compiler часть все еще правильно (и полезно на строительных агентов).
mlhDev 27.09.2019 20:22:45

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

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

11
20.12.2008 12:12:35

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

26
20.12.2008 12:25:29
Это правда, что это работает для файлов aspx, но анализ всего решения не включает файлы ascx (пользовательские элементы управления)
mookid8000 11.01.2009 11:12:17
Я полагаю, что так и есть в R # 5, но это огромный ресурс для больших проектов (даже на моем домашнем компьютере емкостью 16 ГБ его не стоит использовать).
Andrew 24.07.2010 13:47:36
@Andrew / @ mookid8000 - R # также будет отлавливать ошибки, которые не будут компилятором, такие как отсутствующие / неправильные представления и действия. R # немного замедлит работу вашего ПК (мне кажется, это нормально для большого проекта с 4 Гб оперативной памяти и многопоточным процессором), но я легко возвращаю время, затрачиваемое на его ожидание, и в результате я выполняю меньше операций с моим code as R # обеспечивает операции более высокого уровня, которые объединяют в себе множество шагов, которые мне нужно сделать, чтобы выполнить ту же задачу вручную. Ваш проект должен быть огромным!
Drew Noakes 2.09.2010 01:08:39
Для больших проектов «немного замедлить работу ПК» - это преуменьшение. Моя сборочная машина имеет 16 ГБ ОЗУ и 8 ядер (2 Xeons), и это просто CRAWLS. Я чувствую, что R # просто не был создан для проектов нашего размера, хотя ... например, наше решение имеет ~ 30 проектов, пару миллионов LOC и много сотен просмотров. Я люблю R # в наших небольших проектах (например, несколько проектов и не более 50 просмотров), но в нашем большом мы всегда должны его отключать.
Beep beep 26.06.2011 00:53:37
Это может работать, но бежать! Я включил это, думая, что мое решение было маленьким, и оно никогда не заканчивало «анализировать» и съедало всю мою оперативную память и процессор. Мне понадобилось 15 минут, чтобы прийти в себя.
emragins 10.03.2014 22:15:11

Из документа 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>
562
10.05.2016 08:48:59
Если это не сработает для вашего проекта, проверьте, нет ли в вашем файле проекта <MvcBuildViews> false </ MvcBuildViews>. Он переопределял новый элемент <MvcBuildViews>, который я добавил поверх него.
Adrian Grigore 20.04.2009 16:59:13
@mxmissile: Скотт Гатри рекомендовал добавить в ваше решение проект веб-развертывания, чтобы получить такую ​​поддержку в проектах веб-приложений: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid 28.07.2009 20:06:54
Убедитесь, что EnableUpdateable имеет значение false, иначе представления не будут предварительно скомпилированы. <EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg 14.04.2010 08:41:09
Почему, почему, почему ... нет сочетания клавиш для построения с представлениями или без них? МС почему?
dariol 11.07.2011 07:50:21
Это решение добавлено в инструменты MVC. stackoverflow.com/a/2670792/878612
lko 7.05.2014 08:06:40

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

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

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

6
17.11.2011 15:04:17

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

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

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

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

1
12.02.2017 07:56:49
Я попробовал инструменты для повышения производительности. Но не ведет себя так, как здесь сказано. Ошибка при просмотре бритвы, но сборка прошла успешно. представления не помечены или подчеркнуты красным или в любом месте дерева обозревателя решений.
Blue Clouds 9.02.2017 15:19:05
@BlueClouds: вы правы. Я создал пример проекта и добавил ошибку времени компиляции в представление. Расширение подчеркнет строки с ошибками красным, но не распространит ошибку вверх в обозревателе решений. Исправляю то, что я изложил в ответе. Оставляю ответ здесь, так как он все еще немного помогает, хотя на самом деле не решает проблему эффективно.
Veverke 12.02.2017 07:43:46

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

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

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

5
3.11.2016 08:25:10
Я проголосовал за этот ответ, потому что горячая клавиша действительно выявила ошибку Razor. Однако впоследствии я заметил, что это работает, только если у вас есть файл .cshtml, открытый в IDE.
Michael12345 17.08.2017 02:07:35