5

我想知道以下是否可能:

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

2 回答 2

8

是的,你可以这样做。视图引擎会将每个目录下的所有文件重新编译成单独的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 确实运行这个构建后事件,它的作用与您要点击应用程序所需的每个文件一样。

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

为了获得最佳性能,我推荐RazorGenerator 预编译器。这实际上将 cshtml 文件嵌入到您的主 DLL 中,这根本不是 MvcBuildViews 所做的。加上它的速度要快得多。

如果您想在生产中使用它,您需要将其更改UsePhysicalViewsIfNewerRazorGeneratorMvcStart.cstrue 以便在您更新视图时重新编译。


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

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

然后,您无需查找即可获得完整路径。

于 2013-03-30T03:00:51.077 回答
-1

是的你可以。

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

于 2013-03-12T03:49:44.770 回答