2011-03-31 20 views
42

Mi chiedevo se le viste del rasoio potrebbero essere compilate, come le viste basate su WebForm?È possibile compilare le viste del rasoio?

Ha senso compilare visualizzazioni Razor e perché qualcuno dovrebbe voler farlo?

+0

Tecnicamente parlando, sono compilati dal compilatore just in time. È inoltre possibile abilitare la creazione di viste per non riuscire con una casella di controllo. –

+0

Correlati: http://stackoverflow.com/questions/383192/compile-views-in-asp-net-mvc –

risposta

23

Sì, è possibile. Date un'occhiata al seguente post: Compile your asp.net mvc Razor views into a seperate dll

È una guida "passo dopo passo" su come compilare le viste del rasoio in una dll separata. Non so se questo è ciò che miri a fare ma sicuramente ti porterà nella giusta direzione.

+4

Questa risposta è ormai superata, ora dovresti fare riferimento a questo post: http://blog.davidebbo.com /2011/06/precompile-your-mvc-views-using.html – Quango

1

Sì, è possibile. In effetti, il miglior esempio che posso pensare sarebbe un motore di template di email. Se si compila e si memorizza nella cache il modello, è possibile rimuovere rapidamente le e-mail senza dover ricominciare da capo l'analisi.

Questo è un buon esempio dell'uso di Razor anche al di fuori di MVC.

53

Edit:

Ecco un post su questo argomento così:

How to Detect Errors of Our ASP.NET MVC Views on Compile Time

per rendere la vostra vista da compilare, eseguire le seguenti operazioni;

  1. scaricare il vostro progetto di destro destro cliccando il progetto sulla soluzione explorer in VS e cliccando scaricare progetto
  2. tasto destro del mouse il progetto che è stato convertito in indisponibile progetto e fare clic su "Modifica your_project_name .csproj "(che sarebbe .vbproj se il tuo progetto è un progetto VB)
  3. vedere il seguente codice;

    <!--There some lines of code here and I deleted them to get to the point quickly--> 
    
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 
    <MvcBuildViews>false</MvcBuildViews> 
    

  4. cambiamento il valore del tag MvcBuildViews da false a true

  5. dopo che salvare e ricaricare il vostro progetto .

dopo aver compilato la soluzione per compilarlo, vedrai che anche la tua vista verrà compilata.

NOTA: per verificarlo, interrompere il codice in una delle tue visualizzazioni di proposito e provare a compilare. vedrai che riceverai un messaggio di errore.

+1

Farò una prova per vedere cosa succede. –

+0

avrebbe dovuto funzionare. Hai provato? – tugberk

+5

Dopo questa modifica ho iniziato a ricevere il messaggio di errore "allowDefinition = 'MachineToApplication' beyond application level" 'durante la creazione della mia soluzione. La soluzione era eseguire _Clean Solution_ in * entrambe * le modalità di debug e release. –

28

Il controllo MvcBuildViews è eccellente ma aggiunge una penalità di 5-10 secondi per la creazione della tua app Web se è abbastanza complessa. Non memorizza nella cache l'output della compilation, quindi esegue una compilazione completa di tutte le visualizzazioni ogni volta.

ho trovato un buon compromesso seguendo il above advice e l'aggiunta di un attributo Condizione:

<MvcBuildViews Condition=" '$(Configuration)' == 'Release' ">true</MvcBuildViews> 

ci aspettiamo ReSharper per segnalare eventuali errori nelle viste in ogni caso e lo sviluppatore può sempre costruire nella configurazione di rilascio come test - abbiamo uno script "preflight" che gli sviluppatori eseguono in modo che possano facilmente assicurarsi che gli obiettivi dei pacchetti funzionino e così via - e se tutto ciò non riesce, il server di build lo prenderà.

Forse questo trucco è ovvio, ma ho iniziato solo a imparare correttamente su msbuild piuttosto che scrivere script Powershell per queste attività. Spero che questo sia utile a qualcuno.

+0

Questo è puro splendore :) – Korayem

Problemi correlati