しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Visual Studio で発行時に Razor のプリコンパイルを行う方法

Web サイトとかにデプロイを行う時に利用する Web 発行には、ビューのプリコンパイルを実行する機能があるのですが、これを使えば ASP.NET MVC の Razor ビューもプリコンパイル出来ます。

プリコンパイルすると何が嬉しいかという話ですが、初回アクセス時にビューのコンパイルが行われない為、デプロイ直後でも高速に動作してくれます。

代わりに、サーバ上のファイルを直接弄っての修正は行えなくなったり、デプロイに数十秒時間がかかったりはするようになりますが、初回アクセスに時間がかかることを考えると、全く問題ないレベルです。

設定は非常に簡単で、発行ウィザードの途中にある「発行中にプリコンパイルする」にチェックを入れます。すると横にある「構成」のリンクが押せるようになるので、もう少し追加の設定を行います。

f:id:shiba-yan:20130914165546p:plain

「構成」リンクを選択すると、以下のようなダイアログが表示されます。

初期表示状態では「プリコンパイル済みサイトを更新可能にする」のチェックが入っていると思うので、これを外しておきます。チェックが入っていると aspx のプリコンパイルしか行われないようです。

f:id:shiba-yan:20130914165557p:plain

これで設定は完了なので、実際にデプロイを行います。

デプロイ中に出力ウィンドウを見ると、aspnet_compiler.exe を実行してビューのコンパイルを行っていることが確認できます。コンパイルされたビューは Bin ディレクトリに dll の形で格納されています。

f:id:shiba-yan:20130914170518p:plain

ちなみに、出力ディレクトリには cshtml ファイルが残っていますが、中身は書き換えられています。コンパイル済みなので、マーカとして残されているだけですね。

これは、プリコンパイル ツールによって生成されたマーカー ファイルです。削除しないでください。

デプロイ後にサイトへアクセスしてみると、初回のコンパイルが実行されないので応答が素早いのが体感できると思います。

頻繁にデプロイが行われる場合やアクセスの多いサービスの場合には、プリコンパイルを有効にしておいた方が、初回の速度低下が起きないのでおすすめですね。