2016-02-11 23 views
6

Stiamo convertendo una soluzione per utilizzare il nuovo compilatore Roslyn. Quando lo compilo tramite teamCity in modalità di rilascio, il passaggio MVCBuildViews utilizza ancora aspnet_compiler.exe e richiede circa 15 minuti per precompilare le visualizzazioni. Lo stesso procedimento usato per prendere 3 minuti utilizzando la versione precedente di aspnet_compiler.exe su .NET 4.5MvcBuildViews in MS2015 impiega molto tempo

Questo è il comando che vuole un po ':

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_compiler.exe -v Temp -p E: \ percorso \ a \ web \ progetto \ Directory

ho provato modificando i parametri di MSBuild, ma nulla è cambiato. è un problema noto, ci sono dei problemi? Devo precompilare la vista con Roslyn? qual è lo svantaggio per disattivare disattivare il passaggio MVCBuildViews se si tratta di un'opzione (credo che la nostra scelta di pre-compilare in fase di rilascio è ciò che causa questo passaggio per l'esecuzione).

risposta

4

Abbiamo riscontrato lo stesso problema in Stack Overflow, ecco perché abbiamo creato StackExchange.Precompilation. Puoi leggere su questo argomento in our announcement blog post, ma qui ci sono alcuni dettagli tecnici cruenti, come abbiamo, naturalmente, studiato perchéaspnet_compiler.exe era così lento, prima di scrivere il nostro stesso sostituto per questo.

aspnet_compiler.exe è stato intorno a lungo prima e , e, naturalmente, ha sostenuto roba come la compilazione in batch tramite <compilation batch="true" />. Perché una vista possa essere compilata, il modello CSHTML deve essere prima trasformato in C# (CodeDOM). Sfortunatamente, questa non è la compilation come tale, quindi batch="true" non si applica ad esso. (in-) Effettivamente, le viste vengono elaborate in sequenza, una vista alla volta. E tutte le funzionalità di Roslyn che aggiungi su di essa lo rallentano, dal momento che ci deve essere una conversione CodeDOM -> roslyn ad un certo punto.

Ecco una bella traccia dello stack, di quello che sta succedendo prima di un lotto compilazione in aspnet_compiler.exe avviene.

aspnet_compiler.exe foreach loop

Avviso this AddBuildProvider call (che chiama GenerateCode) è già dentro due foreach loop. Credo che le opzioni batch="true" era sempre e solo efficace ad accelerare la compilazione di App_Code in progetti di siti web ...

Questo è ciò che è successo ai nostri tempi di costruzione in seguito:

enter image description here

io non lo consiglio disabilitazione della precompilazione a chiunque esegua un'applicazione ASP.NET MVC in produzione.

  • L'argomento più ovvio è che verifica il codice di visualizzazione. Altrimenti, si scambiano errori in fase di compilazione sul server di build per errori di runtime, in produzione.
  • L'altro argomento è la prestazione. I tuoi punti di vista devono essere compilati a un certo punto e, se non avviene in fase di compilazione, i primi utenti che hanno colpito il tuo sito devono attendere, ancora, in produzione.
+1

Grazie!Esplorerò StackExchange.Precompilation. E passa qualsiasi feedback. Complimenti a voi ragazzi di StackExchange per il buon lavoro che fate. – delloPiro

Problemi correlati