ASP.NET MVC-实时更新预编译的Razor视图文件



我想知道以下是否可能:

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

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

C: \Windows\Microsoft.NET\Framework\v4.0.30119\临时ASP.NETFiles\micropedi_mvc\d3b5b4cd\eb21933\App_global.asax.ihdifed.DLL

您可以使用ILSpyReflector打开此文件,并查看到底是哪些文件被编译到其中。如果您有多个目录,您将看到生成的多个DLL。

Note that all that MvcBuildViews`所做的就是运行这个生成后事件,它的作用就像您要命中应用程序所需的每个文件一样。

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

为了获得最佳性能,我建议使用RazorGenerator预编译器。这实际上将cshtml文件嵌入到主DLL中,而MvcBuildViews根本不这么做。再加上速度更快。

如果您想在生产中使用它,您需要将RazorGeneratorMvcStart.cs中的UsePhysicalViewsIfNewer更改为true,以便在更新视图时重新编译。


提示:如果你想准确地找到cshtml文件编译的DLL,只需将其添加到你的页面

 <div>This file is compiled to  @this.GetType().Assembly.CodeBase</div> 

然后您将在不查找的情况下获得完整路径。

可以。

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

最新更新