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

457

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

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

9 ответов

108
Лучший ответ

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

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

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

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

  • 1
    Есть ли похожее решение для VS2012?
  • 6
    К сожалению, он поддерживает только C # и не VB.Net
Показать ещё 6 комментариев
505

Из слова readme word для 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, для включения проверки времени просмотра в режиме сборки, выполнив следующие шаги:

  • Откройте файл проекта в текстовом редакторе.
  • Добавьте следующий элемент под самым верхним элементом <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  • В конце файла проекта раскомментируйте элемент <Target Name="AfterBuild"> и измените его, чтобы он соответствовал следующему:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
  • 27
    Если это не сработает для вашего проекта, проверьте, нет ли где-нибудь в вашем файле проекта <MvcBuildViews> false </ MvcBuildViews>. Он переопределял новый элемент <MvcBuildViews>, который я добавил поверх него.
  • 0
    Есть ли способ заставить это работать с веб-формами?
Показать ещё 7 комментариев
40

Вы можете использовать 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" или "/лм/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>
22

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

  • 4
    Это правда, что это работает для файлов aspx, но анализ всего решения не включает файлы ascx (пользовательские элементы управления)
  • 3
    Я полагаю, что так и есть в R # 5, но это огромный ресурс для больших проектов (даже на моем домашнем компьютере емкостью 16 ГБ его не стоит использовать).
Показать ещё 3 комментария
11

Я не знаю, какой режим просмотра вы используете, но если вы используете Razor, вы можете проверить мой пост в блоге: Скомпилировать asp.net mvc Razor просматривает отдельную dll

Следует также использовать этот код для других просмотров, но еще не сделали и не проверили, что еще

10

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

См. анонс

5

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

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

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

2

Сборкa > Анализ кода выполнения

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

Помог мне поймать ошибки Razor.

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню