ASP.NET MVC'de Görünümleri Derleme


558

Ben de derleme zamanı hataları olup olmadığını görmek için görünümleri derlemek için msbuild görev istiyorum ... derleme zamanı. Herhangi bir fikir?


1
Hangi görünümü kullandığınızı bilmiyorum, ancak Razor kullanıyorsanız blog yayınımı kontrol etmek isteyebilirsiniz: <a href = " chrisvandesteeg.nl/2010/11/22/… asp.net mvc Razor ayrı bir dll içine görüntüler </a> Bu kodu diğer viewengines için de kullanmak mümkün olmalı, ama henüz yapmadı ve henüz test
Chris van de Steeg

Yanıtlar:


154

Açıkçası RazorGenerator nuget paketini tavsiye ederim . Bu şekilde, görünümleriniz .designer.cskaydettiğinizde oluşturulan bir dosyaya sahip olur ve görünümleriniz için derleme zamanı hataları almanın yanı sıra, bunlar da derlemeye önceden derlenir (= daha hızlı ısınma) ve Resharper da ek yardım sağlar.

Bunu kullanmak için ASP.NET MVC projenizdeki RazorGenerator nuget paketini ekleyin ve Araçlar → Uzantılar ve Güncellemeler altındaki öğe altında " Razor Generator " uzantısını yükleyin .

Bunu kullanıyoruz ve bu yaklaşımla derleme başına ek yük çok daha az. Bunun üzerine muhtemelen derleme süresi etkisini önemli ölçüde azaltan .NET Demon by RedGate öneriyoruz .

Bu yardımcı olur umarım.


1
VS2012 için benzer bir çözüm var mı?
daniel

6
Ne yazık ki sadece C # ve
VB.Net'i

3
@zoidbergi RazorGenerator VS2012 ile çalışır; RazorGenerator.Mvc ve RazorGenerator.MsBuild kullanırken: uzatma gerekmez. Stacktoheap.com
Jeroen K için

2
Bu yalnızca hataları bulmak için kullanılabilir mi - yoksa uygulamayı dağıtırken görünüm motorunun yerini mi alıyor?
niico

RazorGenerator nuget paketini ve Razor Generator uzantısını yükledim. Projemde hiçbir şey değişmedi. Hiçbir .designer.cs dosyası görünmedi. Visual studio 2017 kullanıyorum.
Michael Samteladze

563

RC1 için benioku kelimesi doc'den (google tarafından dizine eklenmemiş)

ASP.NET Derleyici Yapım Sonrası Adım

Şu anda, bir görüntüleme dosyasındaki hatalar çalışma zamanına kadar algılanmıyor. Derleme zamanında bu hataları algılamanıza izin vermek için, ASP.NET MVC projeleri artık varsayılan olarak devre dışı bırakılmış bir MvcBuildViews özelliği içerir. Bu özelliği etkinleştirmek için, proje dosyasını açın ve MvcBuildViews özelliğini aşağıdaki örnekte gösterildiği gibi true olarak ayarlayın:

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

Not Bu özelliğin etkinleştirilmesi, oluşturma süresine bir miktar ek yük ekler.

MVC'nin önceki sürümleriyle oluşturulan projeleri, aşağıdaki adımları uygulayarak görünümlerin oluşturma zamanı doğrulamasını içerecek şekilde güncelleyebilirsiniz:

  1. Proje dosyasını bir metin düzenleyicisinde açın.
  2. En üstteki öğenin altına aşağıdaki öğeyi ekleyin <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. Proje dosyasının sonunda <Target Name="AfterBuild">öğeyi açın ve aşağıdakilerle eşleşecek şekilde değiştirin:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
Projeniz için bu işe yaramazsa, proje dosyanızda bir yerde <MvcBuildViews> false </MvcBuildViews> olup olmadığını kontrol edin. Üstüne eklediğim yeni <MvcBuildViews> öğesini geçersiz kılıyordu.
Adrian Grigore

3
@mxmissile: Scott Guthrie, Web Uygulaması Projelerinde bu tür bir destek almak için çözümünüze bir Web Dağıtım Projesi eklemenizi tavsiye etti: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid

6
EnableUpdateable öğesinin false olarak ayarlandığından emin olun yoksa görünümler önceden derlenmez. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg

55
Neden, neden, neden ... görünümlü veya görünümsüz oluşturmak için klavye kısayolu yok? MS neden?
dariol

2
MVC araçlarına eklenen çözüm budur. stackoverflow.com/a/2670792/878612
lko

50

Bunun için aspnet_compiler kullanabilirsiniz :

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

burada " / Sanal / Uygulama / Yol / Veya / Yol / In / IIS / Metabase " şöyle bir şeydir: " / Uygulamam " veya " / lm / w3svc2 / 1 / root / "

Ayrıca MSDN'de aspnet_compiler'ın MSBuild ile nasıl entegre edileceğini gösteren bir AspNetCompiler Görevi vardır :

<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
Bu güncel değil, aşağıdaki benioku belgesinden bir alıntıya bakın.
JarrettV

1
Diğer cevap daha ayrıntılı olarak proje görevi açıklar, ancak aspnet_compiler kısmı hala doğru (ve yapı ajanları hakkında yararlı) 'dir.
mlhDev

26

Ayrıca Resharper kullanıyorsanız, Solution Wide Analysis'i etkinleştirebilirsiniz ve aspx dosyalarında olabilecek derleyici hatalarını algılar. Bizim yaptığımız şey bu...


4
Aspx dosyaları için çalıştığı doğrudur, ancak çözüm çapında analiz ascx dosyalarını içermez (kullanıcı kontrolleri)
mookid8000

3
R # 5'de olduğuna inanıyorum, ancak büyük projeler için büyük bir kaynak domuzudur (16GB ev makinemde bile kullanmaya değmez).
Andrew

3
@Andrew / @ mookid8000 - R #, derleyicinin eksik / yanlış görünümler ve eylemler gibi hatalarını da yakalar. R # PC'nizi biraz yavaşlatacaktır (4GB ram ve hiper iş parçacıklı bir CPU ile büyük bir ish projesinde iyi buluyorum) ama beklerken harcadığım zamanı kolayca geri kazandım ve sonunda daha az işlem yapıyorum R # olarak kod, aynı görevi manuel olarak elde etmek için atmam gereken birçok adımı bir araya getiren daha üst düzey işlemler sağlar. Projeniz çok büyük olmalı!
Drew Noakes

5
Büyük projeler için, "PC'nizi biraz yavaşlatın" yetersizdir. Yapım makinemde 16GB RAM ve 8 çekirdek (2 Xeons) var ve sadece CRAWLS. R # boyutumuzdaki projeler için henüz yapılmadığı hissine sahibim ... örneğin çözümümüzde ~ 30 proje, birkaç Milyon LOC ve yüzlerce görüş var. Daha küçük projelerimizde (örneğin birkaç proje ve 50'den fazla görünüm yok) R # 'yi seviyorum, ancak büyük projemizde her zaman kapatmamız gerekiyor.
Bip sesi

1
Bu işe yarayabilir, ancak ÇALIŞTIR! Bunu çözümümün küçük olduğunu düşünerek açtım ve asla 'analiz etmeyi' bitirmedi ve tüm RAM'imi ve CPU'yu yedi. İyileşmem için 15 dakika sürdü.
emragins

11

ASP.NET MVC'nin (Ocak veya daha sonraki sürümlerde kullanılabilir) bir sonraki sürümünde, görünümleri derleyen MSBuild görevi olmalıdır, bu yüzden beklemek isteyebilirsiniz.

Duyuruyu görün



6

Oluştur> Kod Analizini Çalıştır

Kısayol tuşu: Alt+F11

Razor hatalarını yakalamama yardımcı oldu.


2
Kısayol tuşu bir Razor hatası ortaya çıkardığı için bu cevabı iptal ettim. Ancak daha sonra sadece IDE açık .cshtml dosya varsa işe yaramış gibi görünüyor fark ettim.
Michael12345

1

Visual Studio'nun Productivity Power Tools ( ücretsiz ) uzantısını kullanmak biraz yardımcı olur . Özellikle, Solution Error Visualizerözellik. Bununla birlikte, derleme hataları çözüm gezgininde görsel olarak işaretlendi (hatanın bulunduğu kaynak dosyada). Bununla birlikte, bazı nedenlerden dolayı, bu özellik kodun başka bir yerinde diğer hatalarda olduğu gibi çalışmaz.

MVC görünümlerinde, derleme zamanı hatalarının ilgili .cs dosyalarında hala kırmızı ile altı çizilir, ancak bu hataların bildirilmesi Çözüm Gezgini'nde yukarı doğru yayılmaz (hiçbir şekilde, içerilen kaynak dosyada olmasa bile).

BlueCloudsÖnceki beyanımı düzelttiğiniz için teşekkürler .

Bunu , uzantının github projesinde bir sorun olarak bildirdim .


1
Verimlilik Elektrikli El Aletleri'ni denedim. Ancak burada söylendiği gibi davranmaz. Ustura görünümünde hata var ama derleme başarılı. görünümler kırmızı renkte veya çözüm patlatma ağacının hiçbir yerinde işaretlenmez veya altı çizilmez.
Blue Clouds

2
@MaviClouds: haklısın. Örnek bir proje oluşturdum ve bir görünümde derleme zamanı hatası ekledim. Uzantı, hata satırlarının kırmızısının altını çizecek, ancak çözüm gezgininde hatayı yaymayacaktır. Cevapta söylediklerimi düzeltiyorum. Bu sorunun cevabını burada bırakıyorum çünkü gerçekten problemi etkili bir şekilde çözmezken, biraz yardımcı oluyor.
Veverke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.