ASP.NET MVC - 更新预编译的Razor View文件直播生产

new*_*bie 5 asp.net asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-2

我想知道以下是否可行:

  1. 通过打开visual studio中的项目设置,使用我们的MVC应用程序预编译Razor视图.
  2. 将应用程序部署到生产环境.
  3. 然后在稍后阶段,通过覆盖生产中的现有*.cshtml文件来更新视图,而无需回收应用程序池或重新编译项目并重新部署构建.

Sim*_*ver 7

是的,你可以这样做.视图引擎会将每个目录中的所有文件重新编译为一个单独的DLL,并将其重新编译为这样的文件

C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\micropedi_mvc\d3b5b4cd\eb219373\App_global.asax.ihdiifed.DLL

您可以使用ILSpyReflector打开此文件,并确切地查看编译到哪个文件.如果你有很多目录,你会看到生成了几个DLL.

Note that all thatMvcBuildViews`会运行此post post构建事件,就像您点击应用程序所需的每个文件一样.

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
   <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

为了获得最佳性能,我建议使用RazorGenerator预编译器.这实际上将cshtml文件嵌入到您的主DLL中,这不是MvcBuildViews所做的.再加上它快得多.

如果你想在生产中使用这个你需要改变UsePhysicalViewsIfNewerRazorGeneratorMvcStart.cs为true,因此,如果您更新视图会重新编译.


提示:如果您想要确切地找到编译cshtml文件的DLL,只需将其添加到您的页面即可

 <div>This file is compiled to  @this.GetType().Assembly.CodeBase</div> 
Run Code Online (Sandbox Code Playgroud)

然后你将获得完整的路径,而不是寻找它.


jzm*_*jzm -1

是的你可以。

cshtml 文件不会像项目的其余部分一样被编译。因此您可以在项目之外更改它们。