【发布时间】:2013-02-27 11:23:43
【问题描述】:
我想知道以下是否可行:
- 通过在 Visual Studio 中打开项目设置,使用我们的 MVC 应用预编译 Razor 视图。
- 将应用部署到生产环境。
- 然后在稍后阶段,通过覆盖生产中现有的 *.cshtml 文件来更新视图,而不回收应用程序池或重新编译项目并重新部署构建。?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 razor
我想知道以下是否可行:
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 razor
是的,您可以这样做。视图引擎会将每个目录下的所有文件重新编译成单独的DLL成这样的文件
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件\micropedi_mvc\d3b5b4cd\eb219373\App_global.asax.ihdiifed.DLL
您可以使用ILSpy 或Reflector 打开此文件并查看编译到它的确切文件。如果你有很多目录,你会看到生成了几个 DLL。
Note that all thatMvcBuildViews` 会运行此构建后事件,其作用与您要点击应用程序所需的每个文件一样。
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
为了获得最佳性能,我推荐RazorGenerator precompiler。这实际上将 cshtml 文件嵌入到您的主 DLL 中,这根本不是 MvcBuildViews 所做的。而且速度更快。
如果您想在生产中使用它,您需要将 RazorGeneratorMvcStart.cs 中的 UsePhysicalViewsIfNewer 更改为 true,以便在您更新视图时重新编译。
提示:如果您想准确找到 cshtml 文件编译的 DLL,只需将其添加到您的页面中
<div>This file is compiled to @this.GetType().Assembly.CodeBase</div>
那么你就不用寻找完整的路径了。
【讨论】:
Obj\CodeGen 中,并且更容易找到
是的,你可以。
cshtml 文件不会像项目的其他部分一样被编译。因此,您可以在项目之外更改它们。
【讨论】: