Compilare le visualizzazioni in ASP.NET MVC


558

Voglio che un'attività msbuild compili le viste in modo da poter vedere se ci sono errori in fase di compilazione in fase di compilazione. Qualche idea?


1
Non so quale viewengine stai usando, ma se stai usando Razor, potresti voler controllare il mio post sul blog: <a href = " chrisvandesteeg.nl/2010/11/22/… il tuo asp.net mvc Razor visualizza in una dll separata </a> Dovrebbe essere possibile utilizzare quel codice anche per altri viewengines, ma non l'ho ancora fatto e testato
Chris van de Steeg,

Risposte:


154

Francamente consiglierei il pacchetto nuget RazorGenerator. In questo modo le tue viste .designer.csgenerano un file generato quando le salvi e oltre a ottenere errori di compilazione per le tue viste , sono anche precompilate nell'assembly (= riscaldamento più veloce) e Resharper fornisce anche un ulteriore aiuto.

Per usarlo includi il pacchetto nuget RazorGenerator nel tuo progetto ASP.NET MVC e installa l' estensione " Razor Generator " sotto la voce Strumenti → Estensioni e aggiornamenti .

Usiamo questo e l'overhead per compilazione con questo approccio è molto meno. Inoltre, consiglierei probabilmente .NET Demon di RedGate che riduce ulteriormente l'impatto del tempo di compilazione in modo sostanziale.

Spero che sia di aiuto.


1
esiste una soluzione simile per VS2012?
daniel

6
Peccato che supporti solo C # e non VB.Net
Ed DeGagne il

3
@zoidbergi RazorGenerator funziona con VS2012; quando si utilizza RazorGenerator.Mvc e RazorGenerator.MsBuild: nessuna necessità di estensione. Vedi post di blog su stacktoheap.com
Jeroen K

2
Può essere utilizzato solo per trovare errori o sostituisce il motore di visualizzazione durante la distribuzione dell'applicazione?
Niico,

Ho installato il pacchetto nuget RazorGenerator e l'estensione Razor Generator. Nulla è stato cambiato nel mio progetto. Non è stato visualizzato alcun file .designer.cs. Uso Visual Studio 2017.
Michael Samteladze,

563

Dal file readme doc per RC1 (non indicizzato da google)

Passaggio post-compilazione del compilatore ASP.NET

Attualmente, gli errori all'interno di un file di visualizzazione non vengono rilevati fino al runtime. Per consentire di rilevare questi errori in fase di compilazione, i progetti ASP.NET MVC ora includono una proprietà MvcBuildViews, che è disabilitata per impostazione predefinita. Per abilitare questa proprietà, aprire il file di progetto e impostare la proprietà MvcBuildViews su true, come mostrato nell'esempio seguente:

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

Nota L' abilitazione di questa funzione aggiunge un certo sovraccarico al tempo di compilazione.

È possibile aggiornare i progetti creati con versioni precedenti di MVC per includere la convalida in tempo reale delle visualizzazioni eseguendo i seguenti passaggi:

  1. Apri il file di progetto in un editor di testo.
  2. Aggiungi il seguente elemento sotto l' <PropertyGroup>elemento più in alto : <MvcBuildViews>true</MvcBuildViews>
  3. Alla fine del file di progetto, decommenta l' <Target Name="AfterBuild">elemento e modificalo in modo che corrisponda a quanto segue:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
Se questo non dovesse funzionare per il tuo progetto, controlla se non c'è <MvcBuildViews> false </MvcBuildViews> da qualche parte nel tuo file di progetto. Stava sovrascrivendo il nuovo elemento <MvcBuildViews> che ho aggiunto sopra di esso.
Adrian Grigore,

3
@mxmissile: Scott Guthrie ha raccomandato di aggiungere un progetto di distribuzione Web alla tua soluzione per ottenere questo tipo di supporto nei progetti di applicazioni Web: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid

6
Assicurarsi che EnableUpdateable sia impostato su false, altrimenti le viste non saranno precompilate. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg

55
Perché, perché, perché ... non esiste una scorciatoia da tastiera per creare con o senza viste? MS perché?
Dariol,

2
Questa è la soluzione aggiunta agli strumenti MVC. stackoverflow.com/a/2670792/878612
LKO

50

Puoi usare aspnet_compiler per questo:

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

dove " / Virtual / Application / Path / Or / Path / In / IIS / Metabase " è qualcosa del genere: " / MyApp " o " / lm / w3svc2 / 1 / root / "

Inoltre c'è un'attività AspNetCompiler su MSDN, che mostra come integrare aspnet_compiler con 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
Questo non è aggiornato, vedere un estratto dal documento readme di seguito.
JarrettV,

1
L' altra risposta descrive l'attività del progetto in modo più dettagliato, ma la parte aspnet_compiler è ancora corretta (e utile sugli agenti di compilazione).
mlhDev

26

Inoltre, se usi Resharper, puoi attivare Solution Wide Analysis e rileverà eventuali errori del compilatore che potresti avere nei file aspx. Questo è quello che facciamo...


4
È vero che funziona con i file aspx, ma l'analisi a livello di soluzione non include i file ascx (controlli utente)
mookid8000,

3
Credo che lo faccia in R # 5, ma è un enorme porco di risorse per progetti di grandi dimensioni (anche sul mio computer domestico da 16 GB non vale la pena usarlo).
Andrew,

3
@Andrew / @ mookid8000 - R # rileva anche errori che il compilatore non rileva, come visualizzazioni e azioni mancanti / errate. R # rallenta un po 'il tuo PC (lo trovo bene su un progetto di grandi dimensioni con 4 GB di RAM e una CPU hyperthreaded) ma riesco facilmente a recuperare il tempo che passo ad aspettarlo e finisco per fare meno operazioni sul mio codice come R # fornisce operazioni di livello superiore che raggruppano insieme i molti passaggi che dovrei fare per raggiungere manualmente la stessa attività. Il tuo progetto deve essere enorme!
Drew Noakes

5
Per i progetti di grandi dimensioni, "rallentare un po 'il PC" è un eufemismo. La mia macchina di compilazione ha 16 GB di RAM e 8 core (2 Xeon), e solo CRAWLS. Ho la sensazione che R # non sia stato creato per progetti delle nostre dimensioni ... ad esempio, la nostra soluzione ha circa 30 progetti, un paio di milioni di LOC e molte centinaia di visualizzazioni. Adoro R # sui nostri progetti più piccoli (ad es. Alcuni progetti e non più di 50 visualizzazioni), ma su quello grande dobbiamo sempre disattivarlo.
Beep beep,

1
Questo potrebbe funzionare, ma corri lontano! L'ho pensato pensando che la mia soluzione fosse piccola e non finisse mai di "analizzare" e mangiassi tutta la mia RAM e CPU. Mi ci sono voluti 15 minuti per riprendermi.
emragins

11

La prossima versione di ASP.NET MVC (disponibile a gennaio) dovrebbe avere un'attività MSBuild che compila le viste, quindi potresti voler aspettare.

Vedi l' annuncio



6

Genera> Esegui analisi del codice

Tasto di scelta rapida: Alt+F11

Mi ha aiutato a catturare gli errori del rasoio.


2
Ho votato a favore di questa risposta perché il tasto di scelta rapida ha effettivamente rivelato un errore Razor. Tuttavia, successivamente ho notato che sembra funzionare solo se il file .cshtml è aperto nell'IDE.
Michael12345,

1

L'uso dell'estensione ( gratuita ) di Power Tools per la produttività di Visual Studio aiuta un po ' . In particolare, la funzionalità. Con esso, gli errori di compilazione contrassegnati visivamente in Esplora soluzioni (nel file di origine in cui è stato rilevato l'errore). Per qualche ragione, tuttavia, questa funzione non funziona come con altri errori in qualsiasi altra parte del codice.Solution Error Visualizer

Con le viste MVC, eventuali errori in fase di compilazione verranno comunque sottolineati in rosso nei rispettivi file .cs, ma la segnalazione di questi errori non viene propagata verso l'alto in Esplora soluzioni (in nessun modo, nemmeno nel file di origine contenente).

Grazie per BlueCloudsaver corretto la mia precedente dichiarazione.

Ho appena segnalato questo come un problema sul progetto github dell'estensione.


1
Ho provato la produttività degli utensili elettrici. Ma non si comporta come ciò che viene detto qui. Si è verificato un errore nella vista del rasoio ma la creazione è riuscita. le viste non sono contrassegnate o sottolineate in rosso o in qualsiasi punto dell'albero della soluzione di exploit.
Blue Clouds

2
@BlueClouds: hai ragione. Ho creato un progetto di esempio e ho aggiunto un errore di compilazione in una vista. L'estensione sottolinea in rosso le righe di errore, ma non propaga l'errore in Esplora soluzioni. Sto correggendo ciò che ho affermato nella risposta. Lascio qui la risposta perché aiuta ancora un po ', senza in effetti risolvere il problema in modo efficace.
Veverke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.