ASP.NET MVCでのビューのコンパイル


558

msbuildタスクでビューをコンパイルして、コンパイル時にエラーがあるかどうかを確認できるようにしたい...コンパイル時。何か案は?


1
使用しているビューエンジンはわかりませんが、Razorを使用している場合は、私のブログ投稿<a href = " chrisvandesteeg.nl/2010/11/22/…your asp.net を確認してください。 mvc Razorのビューを別のdllに</a>他のビューエンジンでもそのコードを使用できるはずですが、まだそれを実行してテストしていません
Chris van de Steeg

回答:


154

率直に言って、RazorGenerator nugetパッケージをお勧めします。そうすることで、ビュー.designer.csを保存したときにビューにファイルが生成され、ビューのコンパイル時エラーが発生するだけでなく、ビューもアセンブリにプリコンパイル(=ウォームアップの高速化)され、Resharperは追加のヘルプも提供します。

これを使用するには、ASP.NET MVCプロジェクトにRazorGenerator nugetパッケージを含め、[ ツール]→[拡張機能と更新]の下の[ Razor Generator ]拡張機能をインストールします

私たちはこれを使用し、このアプローチでのコンパイルごとのオーバーヘッドははるかに少なくなります。これに加えて、コンパイル時間への影響を大幅に減らすRedGateの.NET Demonをおそらくお勧めします

お役に立てれば。


1
VS2012に似たソリューションはありますか?
ダニエル2013年

6
残念なことに、C#のみをサポートし、VB.Netはサポートしていません
Ed DeGagne

3
@zoidbergi RazorGeneratorはVS2012で動作します。RazorGenerator.MvcおよびRazorGenerator.MsBuildを使用する場合:拡張の必要はありません。stacktoheap.comの
Jeroen K

2
これはエラーを見つけるためだけに使用できますか?またはアプリケーションをデプロイするときにビューエンジンを置き換えますか?
niico 2017年

RazorGenerator nugetパッケージとRazor Generator拡張機能をインストールしました。私のプロジェクトでは何も変更されていません。.designer.csファイルは表示されませんでした。私は、Visual Studio 2017を使用
マイケルSamteladze

563

RC1のREADMEワードドキュメントから(グーグルによって索引付けされていません)

ASP.NETコンパイラのビルド後のステップ

現在、ビューファイル内のエラーは実行時まで検出されません。コンパイル時にこれらのエラーを検出できるように、ASP.NET MVCプロジェクトにMvcBuildViewsプロパティが含まれるようになりました。これはデフォルトで無効になっています。このプロパティを有効にするには、次の例に示すように、プロジェクトファイルを開き、MvcBuildViewsプロパティをtrueに設定します。

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

この機能を有効にすると、ビルド時間にオーバーヘッドが追加されます。

次の手順を実行することで、MVCの以前のリリースで作成されたプロジェクトを更新して、ビューのビルド時の検証を含めることができます。

  1. テキストエディターでプロジェクトファイルを開きます。
  2. 一番上の要素の下に次の要素を追加します<PropertyGroup><MvcBuildViews>true</MvcBuildViews>
  3. プロジェクトファイルの最後で、<Target Name="AfterBuild">要素のコメントを解除し、次のように変更します。
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>

27
これがプロジェクトで機能しない場合は、プロジェクトファイルのどこかに<MvcBuildViews> false </ MvcBuildViews>がないかどうかを確認してください。その上に追加した新しい<MvcBuildViews>要素を上書きしていました。
エイドリアン・グリゴア

3
@mxmissile:スコット・ガスリーは、Webアプリケーションプロジェクトでのサポートのこの種を得るためにあなたのソリューションにWeb配置プロジェクトを追加することをお勧め:weblogs.asp.net/scottgu/archive/2006/09/22/...
Zhaph -ベンDuguid

6
EnableUpdateableがfalseに設定されていることを確認してください。そうでない場合、ビューはプリコンパイルされません。<EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews>(devcarl.posterous.com/…
CarlHörberg2010

55
なぜ、なぜ、なぜ...ビュー付きまたはビューなしでビルドするためのキーボードショートカットがないのですか?MSなんで?
dariol

2
これは、MVCツールに追加されたソリューションです。stackoverflow.com/a/2670792/878612
lko 2014年

50

これにはaspnet_compilerを使用できます。

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

ここで、 " / Virtual / Application / Path / Or / Path / In / IIS / Metabase "は次のようになります: " / MyApp "または " / lm / w3svc2 / 1 / root / "

また、MSDN にはAspNetCompiler Taskがあり、aspnet_compilerを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>

5
これは古くなっています。以下のreadmeドキュメントからの抜粋を参照してください。
JarrettV、2009

1
もう1つの答えはプロジェクトタスクを詳細に説明していますが、aspnet_compilerの部分はまだ正しいです(ビルドエージェントで役立ちます)。
mlhDev

26

また、Resharperを使用している場合は、Solution Wide Analysisをアクティブにすることができ、aspxファイルにある可能性のあるコンパイラエラーを検出します。それが私たちがすることです...


4
aspxファイルで機能するのは事実ですが、ソリューション全体の分析にはascxファイル(ユーザーコントロール)は含まれていません
mookid8000

3
私はR#5でそれを行うと信じていますが、それは大規模なプロジェクトのための巨大なリソースを消費します(私の16GB家庭用マシンでさえ、使用する価値がありません)。
Andrew

3
@Andrew / @ mookid8000-R#は、ビューやアクションが見つからない/正しくないなど、コンパイラーが認識しないエラーもキャッチします。R#はPCの速度を少し遅くします(4 GBのRAMとハイパースレッドのCPUを備えた大規模なプロジェクトでは問題ありません)が、待機する時間を簡単に取り戻すことができます。 R#としてのコードは、同じタスクを手動で達成するために実行する必要がある多くのステップをバッチ処理する、より高いレベルの操作を提供します。あなたのプロジェクトは巨大でなければなりません!
Drew Noakes

5
大規模なプロジェクトの場合、「PCを少し遅くする」ことは控えめな表現です。私のビルドマシンには16 GBのRAMと8つのコア(2つのXeon)があり、それは単なるCRAWLSです。私は、R#が私たちのサイズのプロジェクト用に作られたわけではないと感じています...たとえば、私たちのソリューションには、約30のプロジェクト、数百万のLOC、および数百のビューがあります。小さなプロジェクト(例:いくつかのプロジェクトと50以下のビュー)ではR#が大好きですが、大きなプロジェクトでは常にそれをオフにする必要があります。
ビープビープ音'26年

1
これでうまくいくかもしれませんが、RUN AWAY!私は自分のソリューションが小さく、「分析」が完了せず、すべてのRAMとCPUを食べていないと考えて、これをオンにしました。15分で回復しました。
2014年

11

ASP.NET MVCの次のリリース(1月頃に利用可能になる予定)には、ビューをコンパイルするMSBuildタスクが含まれているため、しばらくお待ちください。

発表を見る


6

ここで与えられた答えは、一部のMVCバージョンでは機能しますが、他のバージョンでは機能しません。

シンプルなソリューションはMVC1で機能しましたが、MVC2へのアップグレード時にビューがコンパイルされなくなりました。これは、Webサイトのプロジェクトファイルのバグが原因でした。こちらのハッキングされた記事をご覧ください。

これを参照してください:http : //haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx


6

ビルド>コード分析の実行

ホットキー:Alt+F11

Razorエラーをキャッチするのに役立ちました。


2
ホットキーが実際にRazorエラーを公開したので、私はこの回答に賛成しました。ただし、その後、IDEで.cshtmlファイルを開いている場合にのみ機能するようです。
Michael12345 2017

1

Visual StudioのProductivity Power Tools無料)拡張機能を使用すると、少し役立ちます。具体的には、Solution Error Visualizer機能。これを使用すると、コンパイルエラーはソリューションエクスプローラー(エラーが見つかったソースファイル内)で視覚的にマークされます。ただし、何らかの理由で、この機能はコードの他の場所の他のエラーと同様に機能しません。

MVCビューでは、コンパイル時のエラーはそれぞれの.csファイルで赤の下線が引かれますが、これらのエラーの通知はソリューションエクスプローラーでは上向きに伝達されません(含まれているソースファイルでさえも伝達されません)。

BlueClouds以前の発言を訂正していただきありがとうございます。

これを拡張機能のgithubプロジェクトの問題として報告しました。


1
Productivity Power Toolsを試しました。しかし、ここで言われているようには動作しません。かみそりのビューにエラーがありますが、ビルドは成功です。ビューは赤でマークされたり下線が引かれたり、ソリューションエクスプローラツリーのどこにも表示されません。
Blue Clouds

2
@BlueClouds:あなたは正しい。サンプルプロジェクトを作成し、ビューにコンパイル時エラーを追加しました。拡張機能は、エラーのある行に赤の下線を引きますが、ソリューションエクスプローラーでエラーを上に伝播しません。私が答えで述べたことを訂正しています。実際には問題を効果的に解決していませんが、それでも少しは役に立ちますので、ここで答えを残します。
Veverke 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.