Складіть перегляди в ASP.NET MVC


558

Я хочу, щоб завдання msbuild збирало представлення даних, щоб я міг бачити, чи є помилки часу компіляції на добре ... час компіляції. Будь-які ідеї?


1
Я не знаю, який вигляд, який ви використовуєте, але якщо ви використовуєте Razor, ви можете перевірити мій пост у блозі: <a href = " chrisvandesteeg.nl/2010/11/22/… ваш asp.net mvc Razor переглядає окремий dll </a> Має бути можливість використовувати цей код і для інших viewengines, але ще цього не зробили і не перевірили
Chris van de Steeg

Відповіді:


154

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

Щоб скористатися цією функцією, включіть пакет Nuget RazorGenerator у проект ASP.NET MVC та встановіть розширення " Генератор Razor " під пунктом у розділі Інструменти → Розширення та оновлення .

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

Сподіваюсь, це допомагає.


1
чи є подібне рішення для VS2012?
Даніель

6
Прикро, що він підтримує лише C # і VB.Net
Ed DeGagne,

3
@zoidbergi RazorGenerator працює з VS2012; при використанні RazorGenerator.Mvc і RazorGenerator.MsBuild: розширення не потрібно. Дивіться запис у блозі на stacktoheap.com
Jeroen K

2
Чи можна це використовувати лише для виявлення помилок - чи це замінює механізм перегляду при розгортанні програми?
niico

Я встановив Nuget пакет RazorGenerator та розширення Razor Generator. У моєму проекті нічого не змінилося. Немає файлів .designer.cs. Я використовую візуальну студію 2017.
Майкл Самтеладзе

563

З слова readme 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>

27
Якщо це не допоможе вашому проекту, перевірте, чи в файлі проекту десь не є <MvcBuildViews> false </MvcBuildViews>. Він переосмислив новий елемент <MvcBuildViews>, який я додав поверх нього.
Адріан Григоре

3
@mxmissle: Скотт Гетрі рекомендував додати проект веб-розгортання до свого рішення, щоб отримати таку підтримку в проектах веб-прикладних програм: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid

6
Переконайтеся, що для параметра EnableUpdateable встановлено значення false, інакше перегляди не будуть попередньо скомпільовані. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Карл Херберг,

55
Чому, чому, чому ... не існує комбінації клавіш для побудови з переглядами або без них? ЧС чому?
dariol

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 / "

Також є завдання AspNetCompiler на MSDN, яка показує, як інтегрувати 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>

5
Це застаріло, див. Уривок із документа докладу readme нижче.
JarrettV

1
Інший відповідь описує завдання проекту більш детально, але aspnet_compiler частина все ще правильно (і корисно на будівельних агентів).
mlhDev

26

Крім того, якщо ви використовуєте Resharper, ви можете активувати Solution Wide Analysis, і він виявить будь-які помилки компілятора, які можуть виникнути у файлах aspx. Це те, що ми робимо ...


4
Це правда, що він працює для файлів aspx, але загальний аналіз не включає файли ascx (керування користувачами)
mookid8000,

3
Я вважаю, що це робиться в R # 5, але це величезна башта з ресурсами для великих проектів (навіть на моїй домашній машині потужністю 16 Гб її не варто використовувати).
Андрій

3
@Andrew / @ mookid8000 - R # також виявить помилки, яких компілятор не буде, наприклад, відсутні / неправильні подання та дії. R # трохи сповільнить ваш комп'ютер (мені здається, це добре у великому проекті з 4 ГБ оперативної пам’яті та гіперточеним процесором), але я легко повертаю час, який витрачаю на його очікування, і в кінцевому підсумку роблю менше операцій на своєму код, як R #, забезпечує операції вищого рівня, які об'єднують багато кроків, які мені доведеться вжити для досягнення тієї ж задачі вручну. Ваш проект повинен бути величезним!
Дрю Ноакс

5
Для великих проектів "трохи сповільнити ваш комп'ютер" є заниженням. Моя збірна машина має 16 ГБ оперативної пам’яті та 8 ядер (2 Xeons), і це просто CRAWLS. У мене таке відчуття, що R # просто не було створено для проектів нашого розміру, хоча ... наприклад, наше рішення має близько 30 проектів, пару мільйонів LOC та багато сотень переглядів. Я люблю R # на наших менших проектах (наприклад, декілька проектів і не більше 50 переглядів), але в нашому великому ми завжди мусимо його вимкнути.
звуковий сигнал

1
Це МОЖЕ працювати, але ВІДБУТИ ВЖЕ! Я ввімкнув це, думаючи, що моє рішення було невеликим, і він ніколи не закінчував "аналізувати" і їв усю мою оперативну пам'ять і процесор. Мені потрібно 15 хвилин, щоб видужати.
emragins

11

Наступний реліз ASP.NET MVC (доступний у січні або близько того) повинен мати завдання MSBuild, яке збирає перегляди, тож ви можете зачекати.

Дивіться оголошення


6

Відповідь, надана тут, працює для деяких версій MVC, але не для інших.

Просте рішення працювало для MVC1, але при переході до MVC2 погляди більше не виконувались. Це сталося через помилку у файлах проекту веб-сайту. Дивіться цю статтю про злому.

Дивіться це: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx


6

Збірка> Запуск аналізу коду

AltКлавіша швидкого доступу: +F11

Допоміг мені зрозуміти помилки бритви.


2
Я відповів на цю відповідь, оскільки гаряча клавіша дійсно виявила помилку Razor. Однак згодом я помітив, що він, здається, працює лише у тому випадку, якщо у вас відкритий файл .cshtml в IDE.
Michael12345

1

Використання розширення Visual Studio Productivity Power Tools ( безкоштовно ) трохи допомагає . Зокрема, Solution Error Visualizerособливість. З його допомогою помилки компіляції візуально позначені в провіднику рішень (у вихідному файлі, де виявлена ​​помилка). Однак чомусь ця функція не працює, як і при інших помилках деінде в коді.

З переглядами MVC будь-які помилки часу компіляції все ще будуть підкреслені червоним кольором у відповідних файлах .cs, але сигналізація про ці помилки не розповсюджується вгору в Провіднику рішень (жодним чином, навіть не у файлі, що містить вихідний файл).

Дякуємо, що BlueCloudsвиправили мою попередню заяву.

Я щойно повідомляв про це як проблему щодо проекту github розширення.


1
Я спробував продуктивність електроінструментів. Але не веде себе так, як тут сказано. У перегляді бритви є помилка, але побудова - успіх. погляди не позначені або підкреслені червоним кольором або десь у дереві дослідників розчину.
Сині хмари

2
@BlueClouds: ти маєш рацію. Я створив зразок проекту та додав помилку часу компіляції у представленні. Розширення буде підкреслювати помилкові лінії червоним кольором, але не поширюватиме помилку в провіднику рішень. Виправляю те, про що говорив у відповіді. Я залишаю відповідь тут, оскільки це все ще допомагає трохи, хоча й не ефективно вирішує проблему.
Веверке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.