次のことが可能かどうか疑問に思っていました:
- Visual Studio でプロジェクト設定をオンにして、MVC アプリで Razor ビューをプリコンパイルします。
- アプリを本番環境にデプロイします。
- その後、アプリケーション プールをリサイクルしたり、プロジェクトを再コンパイルしてビルドを再展開したりせずに、本番環境の既存の *.cshtml ファイルを上書きして、ビューを更新します。
次のことが可能かどうか疑問に思っていました:
はい、できます。ビュー エンジンは、各ディレクトリ内のすべてのファイルを別の DLL に再コンパイルして、次のようなファイルにします。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\micropedi_mvc\d3b5b4cd\eb219373\App_global.asax.ihdiifed.DLL
ILSpy
またはを使用Reflector
してこのファイルを開き、どのファイルがコンパイルされたかを正確に確認できます。多くのディレクトリがある場合は、いくつかの DLL が生成されていることがわかります。
Note that all that
MvcBuildViews` が実行するのは、このビルド後のイベントを実行することです。これは、アプリケーションに必要な各ファイルをヒットする場合と同じことを行います。
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
最大のパフォーマンスを得るには、RazorGenerator precompilerをお勧めします。これにより、実際には cshtml ファイルがメインの DLL に埋め込まれますが、これは MvcBuildViews が行うことではありません。さらに、はるかに高速です。
これを本番環境で使用する場合は、ビューを更新した場合に再コンパイルされるように trueに変更UsePhysicalViewsIfNewer
する必要があります。RazorGeneratorMvcStart.cs
ヒント: cshtml ファイルがコンパイルされている DLL を正確に見つけたい場合は、これをページに追加するだけです。
<div>This file is compiled to @this.GetType().Assembly.CodeBase</div>
次に、検索せずに完全なパスを取得します。
はい、できます。
cshtmlファイルは、プロジェクトの他の部分のようにコンパイルされません。したがって、プロジェクトの外部でそれらを変更できます。