【问题标题】:Precompiling Views using MvcBuildViews使用 MvcBuildViews 预编译视图
【发布时间】:2013-02-12 17:24:52
【问题描述】:

我想发布预编译的视图。我看到了一些关于指定的问题

在 csproj 中更改以下内容

<MvcBuildViews>true</MvcBuildViews>.

并修改 web.config(因为我使用的是实体框架)

<compilation debug="true" targetFramework="4.0">
      <buildProviders>
        <remove extension=".edmx"/>
      </buildProviders>
 </compilation>

现在编译需要更长的时间,但我不确定它是否正常工作

  1. 我可以假设我说的正确吗?如果配置正确,它实际上应该将视图构建到二进制文件中,而不仅仅是进行预编译验证?
  2. 如果为真,那么我是否应该阻止 webdeployment 发送 cshtml?它们在现场是否会导致重新编译?
  3. 如果是这样,这应该会导致部署的 mvc 应用程序的启动时间更快吗?因为他们不需要编译视图?
  4. 我也应该在 csproj 中添加 false 吗?我看到一篇文章建议我应该将其从 true 更改为 false,但它不在我的 csproj 中。

干杯 蒂姆

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    我可以假设我说的是正确的,如果配置正确,它实际上应该将视图构建到二进制文件中,而不仅仅是做 预编译验证?

    没有。

    如果为真,那么我是否应该阻止 webdeployment 发送 cshtml?它们在现场会导致重新编译吗?

    不,cshtml 文件必须在您发货时存在。

    如果是这样,这应该会导致部署的 mvc 的启动时间更快 应用程序?因为他们不需要编译视图?

    不,在发布模式下,Razor 进行了一项优化,它会自动缓存视图的位置,一旦解析它们就不会在后续请求中重新解析。

    因此,故事的寓意是您可以在发布模式下启用 MvcBuildViews 选项,以便您的构建服务器可以在项目的持续集成构建期间检测任何潜在错误。在调试模式下,我将其禁用,因为它会减慢构建速度。

    【讨论】:

    • 好的,所以获得构建二进制文件的唯一方法是使用自定义包,即nuget.org/packages/RazorGenerator.Mvc
    • 构建二进制文件是什么意思?你想达到什么目的?您想将 Razor 视图嵌入到程序集中并在多个项目中重用它们吗?如果是这样,那么,是的,您将不得不使用自定义虚拟路径提供程序。
    • 将视图编译成二进制 dll 的二进制文件(如 dll 中的)。
    • 哦,您需要一个自定义的虚拟路径提供程序。 Razor 视图引擎没有任何内置功能可让您读取嵌入到程序集中的视图。默认情况下,它将在文件系统上查找它们。
    【解决方案2】:

    RazorGenerator 似乎是我最初的问题的唯一选择,即将编译的视图作为二进制文件发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 2014-11-17
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多