2016-02-11 30 views
6

Yeni bir Roslyn derleyicisini kullanmak için bir çözümü dönüştürüyoruz. Sürüm modunda teamCity ile oluşturduğumda, MVCBuildViews adımı hala aspnet_compiler.exe dosyasını kullanır ve precompile view'ların tamamlanması yaklaşık 15 dakika sürer.MS2015'te MvcBuildViews uzun sürüyor

: C: \ Windows \ Microsoft.NET \ Framework \ Aynı süreç Bu biraz zaman alır komuttur .NET 4.5

üzerine Aspnet_compiler.exe önceki sürümünü kullanarak 3 dakika alırdı v4.0.30319 \ Aspnet_compiler.exe -v temp -p E: \ yol \ web \ proje \ Dizini'nin ben MSBuild parametrelerini ama hiçbir şey değişti verdiği denedi

\ olarak. Bu bilinen bir konudur, etrafta herhangi bir çalışma var mı, Roslyn ile manzarayı önceden derlemem gerekiyor mu? MVCBuildViews adımını çevirmek için bir dezavantajı ne anlama geliyorsa (sürümün ön-derleme seçimimizin bu adımın çalışmasına neden olduğuna inanıyorum). Biz StackExchange.Precompilation oluşturulan neden bu yığın taşması de aynı sorunu isabet ettik

cevap

4

, bu. Bu konuda our announcement blog post numaralı telefondan okuyabilirsiniz, ancak doğal olarak incelediğimiz bazı gory teknik detaylar, nedenaspnet_compiler.exe neden bu kadar yavaş, kendi yedeğimizi yazmadan önce.

aspnet_compiler.exe

uzun ve önce yaklaşık edilmiş ve tabii ki, bu <compilation batch="true" /> aracılığıyla toplu derleme gibi şeyler destekledi. Bir görünümün derlenebilmesi için öncelikle CSHTML şablonunun C# (CodeDOM) haline getirilmesi gerekir. Ne yazık ki, bu derleme değil, bu nedenle batch="true" için geçerli değildir. (in-) Etkili olarak, görünümler sırayla işlenir, bir seferde bir görünüm. Ve üstüne eklediğiniz herhangi bir roslyn özellikleri, sadece bir noktada CodeDOM -> roslyn dönüşümü olması gerektiğinden, onu yavaşlatır. aspnet_compiler.exe bir toplu derleme önce neler gerçekleşir ait

Burada, güzel bir yığın izleme. (GenerateCode aramaları)

aspnet_compiler.exe foreach loop

Bildirim this AddBuildProvider call zaten içinde iki foreach döngüler olup.

enter image description here

ben tavsiye etmem: Ben

Bu sonradan bizim yapı süreleri ne olduğunu ... batch="true" seçenekleri Sitesi Projeleri App_Code derlenmesini hızlandırmayı sadece hiç etkili olduğunu tahmin Üretimde bir ASP.NET MVC uygulaması çalıştıran herkes için ön derleme devre dışı bırakılıyor.

  • Bunun en açık argümanı, kodu görüntülediğinizi doğrulamasıdır. Aksi takdirde, üretimde çalışma zamanı hataları için derleme zamanı hataları derleme sunucusunda işlersiniz.
  • Bunun için başka bir argüman performanstır. Görüşlerin bir noktada derlenmeli ve derleme zamanında gerçekleşmezse, sitenize gelen ilk birkaç kullanıcının tekrar üretimde beklemesi gerekir.
+1

Teşekkürler!StackExchange.Precompilation'ı keşfedeceğim. Ve herhangi bir geri bildirim iletin. Yaptığınız iyi iş için StackExchange'de sizlere teşekkür ederim. – delloPiro

İlgili konular