【问题标题】:Can Razor views be compiled?可以编译 Razor 视图吗?
【发布时间】:2011-07-26 21:13:26
【问题描述】:

我想知道是否可以编译 Razor 视图,例如基于 WebForm 的视图?

编译 Razor 视图是否有意义?为什么有人要这样做?

【问题讨论】:

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


【解决方案1】:

编辑:

这里还有一篇关于这个主题的博文:

How to Detect Errors of Our ASP.NET MVC Views on Compile Time

要编译您的视图,请执行以下操作;

  1. 右键卸载您的项目 单击解决方案上的项目 VS中的资源管理器并单击卸载 项目
  2. 右键单击具有 已转为不可用 项目并单击“编辑 your_project_name.csproj”(即 如果你的将是 .vbproj 项目是VB项目)
  3. 见以下代码;

    <!--There some lines of code here and I deleted them to get to the point quickly-->
    
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <MvcBuildViews>false</MvcBuildViews>
    

  4. 将 MvcBuildViews 标记值从 false 更改为 true

  5. 然后保存并重新加载 项目。

在您构建解决方案并对其进行编译后,您将看到您的视图也将被编译。

注意: 测试它,故意破坏您的一个视图中的一些代码并尝试构建。你会看到你会收到一条错误消息。

【讨论】:

  • 我试试看会发生什么。
  • 在此更改之后,我在构建解决方案时开始收到"allowDefinition='MachineToApplication' beyond application level" 错误消息。解决方案是在 调试和发布模式下运行 Clean Solution
  • 我在 VS2013 中看不到 &lt;MvcBuildViews&gt;false&lt;/MvcBuildViews&gt;
  • @DotNetDreamer 我遇到了同样的问题。但是我手动添加了它,并且还使用了 this question 的 Chris Hynes 的回答。
  • 在我们的例子中,我们必须删除binobj 文件夹以消除@JuhaPalomäki 提到的错误。
【解决方案2】:

MvcBuildViews 检查非常好,但如果它足够复杂,它会为构建您的 Web 应用程序增加 5-10 秒的惩罚。它不会缓存编译输出,因此每次都会对您的所有视图进行完整编译。

我通过遵循above advice 并添加条件属性找到了一个不错的折衷方案:

<MvcBuildViews Condition=" '$(Configuration)' == 'Release' ">true</MvcBuildViews>

我们希望 ReSharper 无论如何都会标记视图中的任何错误,并且开发人员始终可以在发布配置中构建作为测试 - 我们有一个开发人员运行的“预检”脚本,因此他们可以轻松确保包目标工作等等 - 如果所有这些都失败了,构建服务器将捕获它。

也许这个技巧很明显,但我才真正开始正确地学习 msbuild,而不是为这些任务编写 Powershell 脚本。我希望这对某人有所帮助。

【讨论】:

  • 那是纯粹的光彩:)
【解决方案3】:

是的,你可以。看看下面的帖子:Compile your asp.net mvc Razor views into a seperate dll

这是关于如何将剃刀视图编译成单独的 dll 的“分步”指南。我不知道这是否是您的目标,但它肯定会让您朝着正确的方向前进。

【讨论】:

【解决方案4】:

是的,这是可能的。事实上,我能想到的最好的例子就是电子邮件模板引擎。如果您编译和缓存模板,那么您可以快速撕掉电子邮件,而无需重新进行解析。

这也是在 MVC 之外使用 Razor 的一个很好的例子。

【讨论】:

  • 你能链接到一个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多