ASP.NET MVC-在生产环境中实时更新预编译的Razor视图文件

ASP.NET MVC-在生产环境中实时更新预编译的Razor视图文件,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,我想知道是否有以下可能: 通过在VisualStudio中打开项目设置,使用我们的MVC应用程序预编译Razor视图 将应用程序部署到生产环境中 然后在以后的阶段,通过覆盖生产中现有的*.cshtml文件来更新视图,而无需回收应用程序池或重新编译项目并重新部署构建 是的,你可以 cshtml文件不像项目的其他部分那样进行编译。因此,您可以在项目之外更改它们。是的,您可以这样做。视图引擎将把每个目录中的所有文件重新编译到一个单独的DLL中 C:\Windows\Microsoft.NET\Fram

我想知道是否有以下可能:

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


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

    是的,您可以这样做。视图引擎将把每个目录中的所有文件重新编译到一个单独的DLL中

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\micropedi\u mvc\d3b5b4cd\eb219373\App\u global.asax.ihdifed.DLL

    您可以使用
    ILSpy
    Reflector
    打开此文件并查看编译到其中的文件。如果您有许多目录,您将看到生成了几个DLL

    请注意,
    MvcBuildViews`所做的只是运行此生成后事件,其作用与点击应用程序所需的每个文件相同

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

    然后,您就可以获得完整的路径,而无需查找它。

    嗯。。。为了预编译,我们打开.csproj文件中的设置true。那么,当我以后在不构建的情况下更改cshtml文件时会发生什么呢?我认为razor文件会在幕后转换为.cs文件,而预编译步骤会在前期为您完成这一部分。因此,如果我们以后更新cshtml文件,运行时是否会重新生成.cs文件?答案很好。我不是想劫持你的答案(它提供了很多信息),但我来自Java/JSP背景,我想知道Razor视图是被编译成.cs文件(比如JSP->Servlets->class)还是直接编译成MSIL?它们被编译成.cs,然后是MSIL。如果在C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET文件中查找,您会发现.cs文件中有一堆写线。如果您使用我引用的预编译器,它们位于项目文件夹中的
    Obj\CodeGen
    ,更容易找到
     <div>This file is compiled to  @this.GetType().Assembly.CodeBase</div>