Kompilasi Tampilan di ASP.NET MVC

558

Saya ingin tugas msbuild untuk mengkompilasi pandangan sehingga saya dapat melihat apakah ada kesalahan waktu kompilasi sekaligus ... waktu kompilasi. Ada ide?

John Oxley
sumber
1
Saya tidak tahu mesin pandangan apa yang Anda gunakan, tetapi jika Anda menggunakan Razor, Anda mungkin ingin memeriksa posting blog saya: <a href = " chrisvandesteeg.nl/2010/11/22/… asp.net Anda mvc Razor dilihat menjadi dll yang terpisah </a> Seharusnya dimungkinkan untuk menggunakan kode itu untuk viewengines lain juga, tetapi belum melakukan & mengujinya belum
Chris van de Steeg

Jawaban:

154

Terus terang saya akan merekomendasikan paket nuget RazorGenerator. Dengan cara itu pandangan Anda memiliki .designer.csfile yang dihasilkan ketika Anda menyimpannya dan di atas mendapatkan kesalahan waktu kompilasi untuk pandangan Anda, mereka juga dikompilasi ke dalam perakitan (= pemanasan lebih cepat) dan Resharper menyediakan beberapa bantuan tambahan juga.

Untuk menggunakan ini termasuk paket nuget RazorGenerator di proyek ASP.NET MVC Anda dan instal ekstensi " Razor Generator " di bawah item di bawah Tools → Extensions and Updates .

Kami menggunakan ini dan overhead per kompilasi dengan pendekatan ini jauh lebih sedikit. Di atas ini saya mungkin akan merekomendasikan .NET Demon oleh RedGate yang selanjutnya mengurangi dampak waktu kompilasi secara substansial.

Semoga ini membantu.

Mirko
sumber
1
apakah ada solusi serupa untuk VS2012?
daniel
6
Sayangnya itu hanya mendukung C # dan tidak ada VB.Net
Ed DeGagne
3
@zoidbergi RazorGenerator bekerja dengan VS2012; saat menggunakan RazorGenerator.Mvc dan RazorGenerator.MsBuild: tidak perlu ekstensi. Lihat entri blog di stacktoheap.com
Jeroen K
2
Apakah ini dapat digunakan hanya untuk menemukan kesalahan - atau apakah itu mengganti mesin tampilan ketika menggunakan aplikasi?
niico
Saya telah menginstal paket nuget RazorGenerator dan ekstensi Razor Generator. Tidak ada yang berubah dalam proyek saya. Tidak ada file .designer.cs yang muncul. Saya menggunakan visual studio 2017.
Michael Samteladze
563

Dari dokumen readme word untuk RC1 (tidak diindeks oleh google)

Langkah Post-Build Compiler ASP.NET

Saat ini, kesalahan dalam file tampilan tidak terdeteksi hingga waktu berjalan. Untuk memungkinkan Anda mendeteksi kesalahan ini pada waktu kompilasi, proyek ASP.NET MVC sekarang menyertakan properti MvcBuildViews, yang dinonaktifkan secara default. Untuk mengaktifkan properti ini, buka file proyek dan setel properti MvcBuildViews menjadi true, seperti yang ditunjukkan dalam contoh berikut:

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

Catatan Mengaktifkan fitur ini menambahkan beberapa overhead ke waktu pembuatan.

Anda dapat memperbarui proyek yang dibuat dengan rilis MVC sebelumnya untuk menyertakan validasi tampilan build-time dengan melakukan langkah-langkah berikut:

  1. Buka file proyek dalam editor teks.
  2. Tambahkan elemen berikut di bawah elemen paling atas <PropertyGroup>: <MvcBuildViews>true</MvcBuildViews>
  3. Di akhir file proyek, batalkan komentar <Target Name="AfterBuild">elemen dan memodifikasinya agar sesuai dengan yang berikut:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
JarrettV
sumber
27
Jika ini tidak berhasil untuk proyek Anda, periksa apakah tidak ada <MvcBuildViews> palsu </MvcBuildViews> di suatu tempat di file proyek Anda. Itu menimpa elemen <MvcBuildViews> baru yang saya tambahkan di atasnya.
Adrian Grigore
3
@mxmissile: Scott Guthrie merekomendasikan menambahkan Proyek Penerapan Web ke solusi Anda untuk mendapatkan dukungan semacam ini di Proyek Aplikasi Web: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid
6
Pastikan bahwa EnableUpdateable disetel ke false atau tampilan tidak akan dikompilasi. <EnableUpdateable> false </EnableUpdateable> <MvcBuildViews> true </MvcBuildViews> ( devcarl.posterous.com/… )
Carl Hörberg
55
Mengapa, mengapa, mengapa ... tidak ada pintasan keyboard untuk membangun dengan atau tanpa tampilan? MS kenapa?
dariol
2
Ini adalah solusi yang ditambahkan ke alat MVC. stackoverflow.com/a/2670792/878612
lko
50

Anda dapat menggunakan aspnet_compiler untuk ini:

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

di mana " / Virtual / Aplikasi / Path / Atau / Path / In / IIS / Metabase " adalah sesuatu seperti ini: " / MyApp " atau " / lm / w3svc2 / 1 / root / "

Juga ada Tugas AspNetCompiler di MSDN, yang menunjukkan cara mengintegrasikan aspnet_compiler dengan MSBuild:

<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>
maks
sumber
5
Ini sudah ketinggalan zaman, lihat kutipan dari dokumen readme di bawah ini.
JarrettV
1
The jawaban lain menggambarkan tugas proyek secara lebih detail, tapi bagian aspnet_compiler masih benar (dan berguna pada agen membangun).
mlhDev
26

Juga, jika Anda menggunakan Resharper, Anda dapat mengaktifkan Solution Wide Analysis dan itu akan mendeteksi kesalahan kompiler yang mungkin Anda miliki dalam file aspx. Itu yang kami lakukan ...

bh213
sumber
4
Memang benar bekerja untuk file aspx, tetapi analisis solusi-lebar tidak menyertakan file ascx (kontrol pengguna)
mookid8000
3
Saya percaya hal itu terjadi pada R # 5, tetapi ini adalah sumber daya yang besar untuk proyek-proyek besar (bahkan pada mesin rumah 16GB saya, itu tidak layak untuk digunakan).
Andrew
3
@Andrew / @ mookid8000 - R # juga akan menangkap kesalahan yang tidak akan dikompilasi oleh kompiler, seperti tampilan dan tindakan yang hilang / salah. R # akan memperlambat PC Anda sedikit (saya merasa baik-baik saja pada proyek besar-ish dengan ram 4GB dan CPU hyperthreaded) tapi saya dengan mudah membuat kembali waktu yang saya habiskan untuk menunggu, dan saya akhirnya melakukan lebih sedikit operasi pada komputer saya kode seperti R # menyediakan operasi tingkat yang lebih tinggi yang menggabungkan banyak langkah yang harus saya ambil untuk mencapai tugas yang sama secara manual. Proyek Anda harus besar!
Drew Noakes
5
Untuk proyek besar, "memperlambat PC Anda sedikit" adalah pernyataan yang meremehkan. Mesin build saya memiliki 16GB RAM dan 8 core (2 Xeon), dan itu hanya CRAWLS. Saya merasa R # hanya tidak dibuat untuk proyek ukuran kami meskipun ... misalnya solusi kami memiliki ~ 30 proyek, beberapa Juta LOC, dan ratusan pandangan. Saya suka R # pada proyek kami yang lebih kecil (mis. Beberapa proyek dan tidak lebih dari 50 tampilan), tetapi pada proyek besar kami, kami selalu harus mematikannya.
Bip bip
1
MUNGKIN ini bekerja, tetapi LARI! Saya mengaktifkannya dengan berpikir bahwa solusi saya kecil dan tidak pernah selesai 'menganalisis' dan memakan semua RAM dan CPU saya. Butuh waktu 15 menit untuk pulih.
emragins
11

Rilis ASP.NET MVC berikutnya (tersedia pada bulan Januari atau lebih) harus memiliki tugas MSBuild yang mengkompilasi pandangan, jadi Anda mungkin ingin menunggu.

Lihat pengumuman

bh213
sumber
6

Bangun> Jalankan Analisis Kode

Tombol pintas: Alt+F11

Membantu saya menangkap kesalahan Razor.

Abu Abdullah
sumber
2
Saya membatalkan jawaban ini karena tombol pintas memang mengekspos kesalahan Razor. Namun saya kemudian memperhatikan bahwa sepertinya hanya berfungsi jika Anda memiliki file .cshtml terbuka di IDE.
Michael12345
1

Menggunakan Ekstensi Daya Produktivitas Visual Studio ( gratis ) sedikit membantu . Secara khusus, Solution Error Visualizerfitur. Dengannya, kompilasi kesalahan ditandai secara visual dalam solusi explorer (dalam file sumber tempat kesalahan ditemukan). Namun karena beberapa alasan, fitur ini tidak berfungsi seperti kesalahan lain di mana pun dalam kode.

Dengan tampilan MVC, setiap kesalahan waktu kompilasi akan tetap digarisbawahi dalam file .cs masing-masing, tetapi menandakan kesalahan ini tidak diperbanyak ke atas di Solution Explorer (sama sekali tidak, bahkan tidak dalam file sumber yang mengandung).

Terima kasih telah BlueCloudsmengoreksi pernyataan saya sebelumnya.

Saya baru saja melaporkan ini sebagai masalah pada proyek github ekstensi.

Veverke
sumber
1
Saya mencoba Alat Daya Produktivitas. Tetapi tidak berperilaku seperti apa yang dikatakan di sini. Ada kesalahan dalam tampilan silet tetapi build itu sukses. pandangan tidak ditandai atau digarisbawahi dalam warna merah, atau di mana saja di pohon solusi pengeksploitasi.
Blue Clouds
2
@BlueClouds: Anda benar. Saya membuat proyek sampel dan menambahkan kesalahan waktu kompilasi dalam tampilan. Ekstensi akan menggarisbawahi garis kesalahan dalam warna merah, tetapi tidak akan menyebarkan kesalahan di explorer solusi. Mengoreksi apa yang saya nyatakan dalam jawaban. Saya meninggalkan jawaban di sini karena masih sedikit membantu, sementara memang tidak menyelesaikan masalah secara efektif.
Veverke