Razor视图可以编译吗?

48

我想知道Razor视图是否可以像基于WebForm的视图一样进行编译?

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


从技术角度来说,它们是由即时编译器编译的。您还可以启用视图构建以通过复选框使构建失败。 - Anthony Mason
相关:https://dev59.com/SnRC5IYBdhLWcg3wMd9S - Jon Schneider
请参考此链接 https://www.codeproject.com/Articles/1169354/Pre-compiled-Razor-View-in-ASP-NET-MVC,可能会有帮助。 - Nirav Vasoya
4个回答

59

编辑:

这里也有一篇关于此主题的博客文章:

如何在编译时检测 ASP.NET MVC 视图错误

要使您的视图得到编译,请执行以下操作:

  1. 通过右键单击解决方案资源管理器中的项目并单击“卸载项目”来卸载项目。
  2. 右键单击已转换为不可用项目的项目并单击“编辑 your_project_name.csproj”(如果您的项目是 VB 项目,则为 .vbproj)。
  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. 保存后重新加载您的项目。

在编译解决方案时,您会发现视图也会被编译。

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


1
我会尝试一下,看看会发生什么。 - Khalid Abuhakmeh
6
在这个更改之后,我在构建解决方案时收到了“allowDefinition='MachineToApplication' beyond application level”错误消息。解决方法是在调试模式和发布模式下都运行“清理解决方案”。 - Juha Palomäki
3
我在VS2013中找不到 <MvcBuildViews>false</MvcBuildViews> - Idrees Khan
@DotNetDreamer 我也遇到了同样的问题。但是我手动添加了它,并且还使用了Chris Hynes在这个问题中的答案。 - mason
在我们的情况下,我们必须删除 binobj 文件夹才能消除 @JuhaPalomäki 提到的错误。 - Alex

34
MvcBuildViews检查非常出色,但如果您的Web应用程序足够复杂,则会增加5-10秒的构建时间。它不会缓存编译输出,因此每次都会对所有视图进行完整编译。
我发现通过遵循上述建议并添加条件属性可以找到一个不错的折衷方案:
<MvcBuildViews Condition=" '$(Configuration)' == 'Release' ">true</MvcBuildViews>

我们期望ReSharper会在视图中标记出任何错误,开发人员也可以构建发布配置文件来测试-我们有一个"预检"脚本,开发人员可以运行它以轻松确保包目标工作正常-如果所有这些都失败了,构建服务器将会捕捉到它。
也许这个技巧很明显,但我只是真正开始学习如何正确使用msbuild,而不是编写Powershell脚本来完成这些任务。希望这对某人有所帮助。

那就是纯粹的才华所在 :) - Korayem

25

可以。请查看以下文章:将您的asp.net mvc Razor视图编译为单独的dll

这是一篇“分步指南”,介绍了如何将您的Razor视图编译到单独的dll中。我不知道这是否符合您的要求,但这绝对会帮助您朝正确的方向前进。


6
这个答案已经过时了,现在应该参考这篇文章:http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html。 - Quango

1

可以的,事实上,我能想到的最好的例子就是电子邮件模板引擎。如果你编译并缓存了模板,那么你就可以快速地发送邮件,而不必重新解析所有内容。

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


你能提供一个示例链接吗? - jakubiszon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接