Kompilieren Sie Ansichten in ASP.NET MVC

558

Ich möchte, dass eine msbuild-Task die Ansichten kompiliert, damit ich sehen kann, ob es zu einem guten Zeitpunkt ... Kompilierungsfehler gibt. Irgendwelche Ideen?

John Oxley
quelle
1
Ich weiß nicht, welche Viewengine Sie verwenden, aber wenn Sie Razor verwenden, sollten Sie meinen Blog-Beitrag lesen : <a href = " chrisvandesteeg.nl/2010/11/22/… your asp.net mvc Razor Ansichten in eine separate DLL </a> Sollte möglich sein, diesen Code auch für andere Viewengines zu verwenden, aber noch nicht getan und getestet
Chris van de Steeg

Antworten:

154

Ich würde ehrlich gesagt das RazorGenerator Nuget-Paket empfehlen . Auf diese Weise .designer.cswird beim Speichern einer Ansicht in Ihren Ansichten eine Datei generiert. Zusätzlich zu den Fehlern bei der Kompilierung für Ihre Ansichten werden diese auch in die Assembly vorkompiliert (= schnelleres Aufwärmen), und Resharper bietet zusätzliche Hilfe.

Um dies zu verwenden, fügen Sie das RazorGenerator- Nuget-Paket in Ihr ASP.NET MVC-Projekt ein und installieren Sie die Erweiterung " Razor Generator " unter Element unter Extras → Erweiterungen und Updates .

Wir verwenden dies und der Overhead pro Kompilierung mit diesem Ansatz ist viel geringer. Darüber hinaus würde ich wahrscheinlich .NET Demon von RedGate empfehlen, wodurch die Auswirkungen auf die Kompilierungszeit erheblich reduziert werden.

Hoffe das hilft.

Mirko
quelle
1
Gibt es eine ähnliche Lösung für VS2012?
Daniel
6
Leider unterstützt es nur C # und kein VB.Net
Ed DeGagne
3
@zoidbergi RazorGenerator arbeitet mit VS2012; Bei Verwendung von RazorGenerator.Mvc und RazorGenerator.MsBuild: Keine Erweiterung erforderlich. Siehe Blogeintrag auf stacktoheap.com
Jeroen K
2
Kann dies nur zum Auffinden von Fehlern verwendet werden - oder ersetzt es die View Engine beim Bereitstellen der Anwendung?
Niico
Ich habe das RazorGenerator-Nuget-Paket und die Razor Generator-Erweiterung installiert. An meinem Projekt wurde nichts geändert. Es wurden keine .designer.cs-Dateien angezeigt. Ich benutze Visual Studio 2017.
Michael Samteladze
563

Aus dem Readme-Word-Dokument für RC1 (nicht von Google indiziert)

Schritt nach dem Erstellen des ASP.NET-Compilers

Derzeit werden Fehler in einer Ansichtsdatei erst zur Laufzeit erkannt. Damit Sie diese Fehler beim Kompilieren erkennen können, enthalten ASP.NET MVC-Projekte jetzt eine MvcBuildViews-Eigenschaft, die standardmäßig deaktiviert ist. Öffnen Sie zum Aktivieren dieser Eigenschaft die Projektdatei und setzen Sie die MvcBuildViews-Eigenschaft auf true, wie im folgenden Beispiel gezeigt:

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

Hinweis Durch Aktivieren dieser Funktion wird die Erstellungszeit etwas länger.

Sie können Projekte aktualisieren, die mit früheren Versionen von MVC erstellt wurden, um die Validierung von Ansichten während der Erstellung einzuschließen, indem Sie die folgenden Schritte ausführen:

  1. Öffnen Sie die Projektdatei in einem Texteditor.
  2. Fügen Sie unter dem obersten <PropertyGroup>Element das folgende Element hinzu: <MvcBuildViews>true</MvcBuildViews>
  3. Kommentieren Sie das <Target Name="AfterBuild">Element am Ende der Projektdatei aus und ändern Sie es wie folgt:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
JarrettV
quelle
27
Wenn dies für Ihr Projekt nicht funktionieren sollte, überprüfen Sie, ob irgendwo in Ihrer Projektdatei <MvcBuildViews> false </ MvcBuildViews> vorhanden ist. Es überschrieb das neue <MvcBuildViews> -Element, das ich darüber hinzugefügt habe.
Adrian Grigore
3
@mxmissile: Scott Guthrie hat empfohlen, Ihrer Lösung ein Webbereitstellungsprojekt hinzuzufügen, um diese Art von Unterstützung in Webanwendungsprojekten zu erhalten: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid
6
Stellen Sie sicher, dass EnableUpdateable auf false gesetzt ist, da sonst die Ansichten nicht vorkompiliert werden. <EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg
55
Warum, warum, warum ... gibt es keine Tastenkombination zum Erstellen mit oder ohne Ansichten? MS warum?
Dariol
2
Dies ist die Lösung, die den MVC-Tools hinzugefügt wurde. stackoverflow.com/a/2670792/878612
lko
50

Sie können hierfür aspnet_compiler verwenden :

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

Dabei ist " / Virtual / Application / Path / Or / Path / In / IIS / Metabase " ungefähr so: " / MyApp " oder " / lm / w3svc2 / 1 / root / "

Außerdem gibt es eine AspNetCompiler-Aufgabe in MSDN, die zeigt, wie aspnet_compiler in MSBuild integriert wird:

<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
quelle
5
Dies ist veraltet, siehe einen Auszug aus dem Readme-Dokument unten.
JarrettV
1
Die andere Antwort beschreibt die Projektaufgabe ausführlicher, aber der Teil aspnet_compiler ist immer noch korrekt (und für Build-Agenten nützlich).
mlhDev
26

Wenn Sie Resharper verwenden, können Sie auch die lösungsweite Analyse aktivieren und alle Compilerfehler in Aspx-Dateien erkennen. Das machen wir ...

bh213
quelle
4
Es ist wahr, dass es für Aspx-Dateien funktioniert, aber die lösungsweite Analyse enthält keine ASCX-Dateien (Benutzersteuerelemente)
mookid8000
3
Ich glaube, dass dies in R # 5 der Fall ist, aber es ist ein riesiger Ressourcenfresser für große Projekte (selbst auf meinem 16-GB-Heimcomputer lohnt es sich nicht, ihn zu verwenden).
Andrew
3
@Andrew / @ mookid8000 - R # erkennt auch Fehler, die der Compiler nicht erkennt, z. B. fehlende / falsche Ansichten und Aktionen. R # verlangsamt Ihren PC ein wenig (ich finde es in einem großen Projekt mit 4 GB RAM und einer Hyperthread-CPU in Ordnung), aber ich kann die Wartezeit leicht zurücknehmen und am Ende weniger Operationen an meinem ausführen Code als R # bietet Operationen auf höherer Ebene, die die vielen Schritte zusammenfassen, die ich ausführen müsste, um dieselbe Aufgabe manuell auszuführen. Ihr Projekt muss riesig sein!
Drew Noakes
5
Bei großen Projekten ist "Verlangsamen Sie Ihren PC etwas" eine Untertreibung. Meine Build-Maschine verfügt über 16 GB RAM und 8 Kerne (2 Xeons) und ist nur CRAWLS. Ich habe das Gefühl, dass R # nicht für Projekte unserer Größe gemacht wurde ... z. B. hat unsere Lösung ~ 30 Projekte, ein paar Millionen LOC und viele hundert Ansichten. Ich liebe R # bei unseren kleineren Projekten (z. B. ein paar Projekte und nicht mehr als 50 Aufrufe), aber bei unseren großen Projekten müssen wir es immer ausschalten.
Beep Beep
1
Dies kann funktionieren, aber RUN AWAY! Ich schaltete dies ein, weil ich dachte, meine Lösung sei klein, und sie wurde nie vollständig analysiert und mein gesamter RAM und meine CPU aufgebraucht. Ich habe 15 Minuten gebraucht, um mich zu erholen.
Emragins
11

Die nächste Version von ASP.NET MVC (verfügbar ab Januar) sollte eine MSBuild-Aufgabe enthalten, mit der Ansichten kompiliert werden. Sie sollten also warten.

Siehe Ankündigung

bh213
quelle
6

Die hier gegebene Antwort funktioniert für einige MVC-Versionen, für andere jedoch nicht.

Die einfache Lösung funktionierte für MVC1, aber beim Upgrade auf MVC2 wurden die Ansichten nicht mehr kompiliert. Dies war auf einen Fehler in den Website-Projektdateien zurückzuführen. Siehe diesen Haacked-Artikel.

Siehe dies: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx

user1040323
quelle
6

Erstellen> Codeanalyse ausführen

Hotkey: Alt+F11

Hat mir geholfen, Rasiermesserfehler zu erkennen.

Abu Abdullah
quelle
2
Ich habe diese Antwort positiv bewertet, weil der Hotkey tatsächlich einen Razor-Fehler aufgedeckt hat. Später bemerkte ich jedoch, dass es nur zu funktionieren scheint, wenn Sie die .cshtml-Datei in der IDE geöffnet haben.
Michael12345
1

Verwenden von Visual Studios ( kostenlosen ) Erweiterung Productivity Power Tools von hilft ein wenig . Insbesondere dieSolution Error VisualizerFunktion. Damit werden Kompilierungsfehler im Lösungs-Explorer (in der Quelldatei, in der der Fehler gefunden wurde) visuell markiert. Aus irgendeinem Grund funktioniert diese Funktion jedoch nicht wie bei anderen Fehlern an einer anderen Stelle im Code.

In MVC-Ansichten werden Fehler zur Kompilierungszeit in den jeweiligen CS-Dateien weiterhin rot unterstrichen. Die Signalisierung dieser Fehler wird jedoch im Projektmappen-Explorer nicht nach oben weitergegeben (in keiner Weise, auch nicht in der enthaltenen Quelldatei).

Vielen Dank für die BlueCloudsKorrektur meiner vorherigen Aussage.

Ich habe dies gerade als Problem gemeldet im Github-Projekt der Erweiterung gemeldet.

Veverke
quelle
1
Ich habe Productivity Power Tools ausprobiert. Aber verhält sich nicht wie hier gesagt. Es gibt einen Fehler in der Rasiereransicht, aber der Build ist erfolgreich. Ansichten sind weder rot noch irgendwo im Lösungs-Exploer-Baum markiert oder unterstrichen.
Blaue Wolken
2
@ BlueClouds: Du hast recht. Ich habe ein Beispielprojekt erstellt und einer Ansicht einen Fehler beim Kompilieren hinzugefügt. Die Erweiterung unterstreicht die fehlerhaften Zeilen in Rot, verbreitet den Fehler jedoch nicht im Lösungs-Explorer. Korrigiere, was ich in der Antwort angegeben habe. Ich lasse die Antwort hier, da sie immer noch ein bisschen hilft, während ich das Problem tatsächlich nicht effektiv löse.
Veverke