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

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

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

Chris van de Steeg 23.11.2010 09:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
566
1
111 641
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Для этого можно использовать 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

где «/ Виртуальный / Приложение / Путь / Или / Путь / В / IIS / Метабаза» - это что-то вроде этого: «/ MyApp» или «/ lm / w3svc2 / 1 / корень /»

Также в 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>

Это устарело, см. Отрывок из документа readme ниже.

JarrettV 12.02.2009 23:00

другой ответ описывает задачу проекта более подробно, но часть aspnet_compiler по-прежнему верна (и полезна для агентов сборки).

mlhDev 27.09.2019 23:22

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

См. объявление

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

Это правда, что это работает для файлов aspx, но анализ всего решения не включает файлы ascx (пользовательские элементы управления)

mookid8000 11.01.2009 14:12

Я считаю, что это работает в R # 5, но это огромная трата ресурсов для больших проектов (даже на моем домашнем компьютере с 16 ГБ его не стоит использовать).

Andrew 24.07.2010 17:47

@Andrew / @ mookid8000 - R # также будет обнаруживать ошибки, которые не распознает компилятор, такие как отсутствующие / неправильные представления и действия. R # немного замедлит ваш компьютер (я считаю, что это нормально для большого проекта с 4 ГБ оперативной памяти и гиперпоточным процессором), но я легко возвращаю время, которое трачу на его ожидание, и в конечном итоге выполняю меньше операций на моем код, поскольку R # предоставляет операции более высокого уровня, которые объединяют множество шагов, которые мне пришлось бы предпринять для выполнения той же задачи вручную. Ваш проект должен быть огромным!

Drew Noakes 02.09.2010 05:08

Для больших проектов "немного замедлите работу вашего ПК" - это ничего не значит. Моя машина сборки имеет 16 ГБ ОЗУ и 8 ядер (2 Xeon), и она просто КРАСИТСЯ. У меня такое чувство, что R # просто не был создан для проектов нашего размера ... например. у нашего решения ~ 30 проектов, пара миллионов LOC и много сотен просмотров. Мне нравится R # в наших небольших проектах (например, несколько проектов и не более 50 просмотров), но в нашем большом нам всегда приходится отключать его.

Beep beep 26.06.2011 04:53

Это МОЖЕТ работать, но УБЕГАТЬ! Я включил это, думая, что мое решение было маленьким, и оно так и не закончило «анализировать» и съело всю мою оперативную память и процессор. Мне потребовалось 15 минут, чтобы прийти в себя.

emragins 11.03.2014 02:15

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

  1. Откройте файл проекта в текстовом редакторе.
  2. Добавьте следующий элемент под самый верхний элемент <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. В конце файла проекта раскомментируйте элемент <Target Name = "AfterBuild"> и измените его, чтобы он соответствовал следующему:
<Target Name = "AfterBuild" Condition = "'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath = "temp" PhysicalPath = "$(ProjectDir)\..\$(ProjectName)" />
</Target>

Если это не должно работать для вашего проекта, проверьте, нет ли <MvcBuildViews> false </MvcBuildViews> где-нибудь в вашем файле проекта. Он переопределял новый элемент <MvcBuildViews>, который я добавил поверх него.

Adrian Grigore 20.04.2009 20:59

@mxmissile: Скотт Гатри рекомендовал добавить проект веб-развертывания в ваше решение, чтобы получить такую ​​поддержку в проектах веб-приложений: weblogs.asp.net/scottgu/archive/2006/09/22/…

Zhaph - Ben Duguid 29.07.2009 00:06

Убедитесь, что для EnableUpdateable установлено значение false, иначе представления не будут предварительно скомпилированы. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> (devcarl.posterous.com/…)

Carl Hörberg 14.04.2010 12:41

У меня проблема с этим, когда пространство имен по умолчанию импортируется в web.config, но страницы не компилируются, есть подсказки?

DevelopingChris 24.11.2010 20:25

Почему, почему, почему ... нет сочетания клавиш для построения с видами или без них? МС почему?

dariol 11.07.2011 11:50

Это решение, добавленное к инструментам MVC. stackoverflow.com/a/2670792/878612

lko 07.05.2014 12:06

Для меня это решение отображает ошибки в сгенерированных файлах .cs, а не фактические ошибки в файлах .cshtml. Есть ли способ изменить это? Это не совсем удобно.

Krisztián Balla 16.05.2015 13:28

Он работает, но двойной щелчок по ошибке в списке ошибок не открывает представление - все равно, чтобы это сделать?

niico 08.11.2017 00:54

После применения вышеуказанного решения я начал получать ошибку, относящуюся к моему web.config (из-за того, что в моей папке obj существовала версия выпуска). Чтобы исправить это, вы можете удалить папки obj на этапе BeforeBuild. Источник: gunnarpeipman.com/aspnet/…

Austin Heller 02.05.2019 22:55

12 лет спустя все еще занимаюсь этим ...

LarryBud 14.01.2021 17:48

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

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

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

Ответ принят как подходящий

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

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

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

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

есть ли подобное решение для VS2012?

daniel 07.05.2013 16:22

К сожалению, он поддерживает только C# и не поддерживает VB.Net

Ed DeGagne 26.07.2013 18:59

@zoidbergi RazorGenerator работает с VS2012; при использовании RazorGenerator.Mvc и RazorGenerator.MsBuild: расширение не требуется. См. Запись в блоге на stacktoheap.com

Jeroen K 01.08.2014 13:19

Может ли это использоваться только для поиска ошибок - или он заменяет механизм просмотра при развертывании приложения?

niico 08.11.2017 02:57

Я установил пакет nuget RazorGenerator и расширение Razor Generator. В моем проекте ничего не изменилось. Файлы .designer.cs не появлялись. Использую Visual Studio 2017.

Michael Samteladze 19.12.2018 09:34

@MichaelSamteladze Не тестировал .NET Core и давно не работал с Razor, но, предполагая, что вы используете полную структуру, взгляните на документы Razor Generator здесь: github.com/RazorGenerator/RazorGenerator Самый простой - использовать Enable-RazorGenerator в консоли диспетчера пакетов . Удачи!

Mirko 20.12.2018 15:34

@MichaelSamteladze Я пробовал (предостережение с 1 минутой инвестиций) на ядре безуспешно (на страницах или представлениях), и я не уверен, что посоветовал бы кому-либо использовать ASP.NET MVC (то есть не-.Core) сегодня, если они намеревались для использования страниц или представлений Razor и для того, чтобы приложение работало какое-то время (если это новое поле), если нет веских аргументов против Core. Понятия не имею, что применимо к вашему случаю.

Mirko 20.12.2018 15:51

@Mirko, мой проект - это не .NET Core, у меня есть обычное веб-приложение MVC5.

Michael Samteladze 21.12.2018 12:01

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

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

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

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

Я попробовал Productivity Power Tools. Но ведет себя не так, как здесь сказано. Ошибка при просмотре бритвы, но сборка выполнена успешно. представления не отмечены и не подчеркнуты красным цветом или где-либо в дереве обозревателя решений.

Blue Clouds 09.02.2017 18:19

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

Veverke 12.02.2017 10:43

Сборка> Выполнить анализ кода

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

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

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

Michael12345 17.08.2017 05:07

Другие вопросы по теме