2014-07-26 26 views
8

Sto usando Asp.net Mvc e volevo sapere perché non ho bisogno di compilare il mio progetto durante l'aggiornamento del codice .net nei file cshtml? Ora, se stiamo parlando di aggiornamenti html \ css, capisco chiaramente perché un semplice aggiornamento sarebbe sufficiente, ma come fa il codice .net al volo in questi casi?Perché non è necessaria una compilazione quando si aggiornano i file cshtml con il codice .net?

Diciamo che ho una vista e voglio aggiungere un po 'di codice C# per esso qualcosa come Datetime.Now.ToString();
Ora tipicamente potrei aggiungere questa riga di codice al mio file cshtml, salvare il file, aggiornare la pagina e vedere il risultato senza compilazione.

Se avrei fatto lo stesso "dal libro" con l'aggiunta di una proprietà per il mio modello, assegnando il Datetime.Now.ToString() nel mio controller e semplicemente rendendo il nuovo var avrei bisogno di compilare il mio codice al fine di vedere i cambiamenti.

Come funziona questa magia? Se è così semplice, perché non può essere fatto anche con i file .cs?

P.s la stessa domanda è rilevante per le applicazioni asp.net e per le pagine aspx \ ascx.

risposta

9

.cshtml i file verranno compilati just-in-time, ovvero quando arriva una richiesta riguardante tali pagine.

Tuttavia i controller sono precompilati e memorizzati nei file DLL del progetto.

Decidere quale utilizzare, dipende dalle esigenze. La pre-compilazione ti dà meno tempo di risposta (perché hai già compilato il codice prima) ma la compilazione just-in-time ti offre flessibilità.

+0

Odio quando cambio singolo carattere di una vista e ci vogliono 2 minuti per caricare il progetto !!!! insopportabile. fammi passare a php. – DarthVader

+0

Interessante .. Da quello che so: il codice cs è compilato nel codice IL (file dll) e il compilatore JIT compila il codice "al volo" con ottimizzazioni al codice macchina. Il codice cshtml è compilato prima del codice IL? –

+2

@AmirPopovich Ho usato il termine "just-in-time" qui per il significato generale. È compilato naturalmente a IL, ma solo quando necessario (per richiesta). Se le prestazioni sono importanti per te (il più delle volte lo è) dovresti evitare di scrivere codice all'interno di cshtml – Alireza

7

Parte dell'infrastruttura ASP.NET è il compilatore ASP.NET. È responsabile della compilazione delle risorse dichiarative (* .aspx, * .ascx, * .cshtml ecc.) Nel codice eseguibile.

Non c'è magia, il runtime decide quando eseguire il compilatore (ad esempio quando la risorsa è stata modificata dall'ultima esecuzione) e quindi richiama il compilatore per creare un codice imperativo dal codice dichiarativo (ad esempio un * .aspx è compilato in * .cs). Quindi richiama il normale compilatore di linguaggio per ottenere un file * .dll contenente CIL.

Questo richiede un po 'di tempo per la prima volta in cui si accede a una risorsa, potrebbe essere utile precompilare tutte le risorse dichiarative in anticipo.

Panoramica:

http://msdn.microsoft.com/en-us/library/vstudio/ms178466(v=vs.100).aspx

precompilazione:.

http://msdn.microsoft.com/en-us/library/aa983464(v=vs.110).aspx

+0

+1 - Grazie per la risposta. È un'ottima risposta La risposta di Alireza è stata buona e l'ho accettata da quando ha risposto per primo. –

Problemi correlati