我想知道以下是否可能:
- 通过在 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 预编译器。这实际上将 cshtml 文件嵌入到您的主 DLL 中,这根本不是 MvcBuildViews 所做的。加上它的速度要快得多。
如果您想在生产中使用它,您需要将其更改UsePhysicalViewsIfNewer
为RazorGeneratorMvcStart.cs
true 以便在您更新视图时重新编译。
提示:如果您想准确找到 cshtml 文件编译的 DLL,只需将其添加到您的页面
<div>This file is compiled to @this.GetType().Assembly.CodeBase</div>
然后,您无需查找即可获得完整路径。
是的你可以。
cshtml 文件不会像项目的其他部分那样被编译。因此,您可以在项目之外更改它们。