可以编译 Razor 视图吗?
Posted
技术标签:
【中文标题】可以编译 Razor 视图吗?【英文标题】:Can Razor views be compiled? 【发布时间】:2011-07-26 21:13:26 【问题描述】:我想知道是否可以编译 Razor 视图,例如基于 WebForm 的视图?
编译 Razor 视图是否有意义?为什么有人要这样做?
【问题讨论】:
从技术上讲,它们是从即时编译器编译的。您还可以使用复选框启用视图构建以使构建失败。 相关:***.com/questions/383192/compile-views-in-asp-net-mvc 请参考此链接它可能会有所帮助codeproject.com/Articles/1169354/… 【参考方案1】:编辑:
这里还有一篇关于这个主题的博文:
How to Detect Errors of Our ASP.NET MVC Views on Compile Time
要编译您的视图,请执行以下操作;
-
右键卸载您的项目
单击解决方案上的项目
VS中的资源管理器并单击卸载
项目
右键单击具有
已转为不可用
项目并单击“编辑
your_project_name.csproj”(即
如果你的将是 .vbproj
项目是VB项目)
见以下代码;
<!--There some lines of code here and I deleted them to get to the point quickly-->
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
将 MvcBuildViews 标记值从 false
更改为 true
然后保存并重新加载 项目。
在您构建解决方案并对其进行编译后,您将看到您的视图也将被编译。
注意: 测试它,故意破坏您的一个视图中的一些代码并尝试构建。你会看到你会收到一条错误消息。
【讨论】:
我试试看会发生什么。 在此更改之后,我在构建解决方案时开始收到"allowDefinition='MachineToApplication' beyond application level"
错误消息。解决方案是在 调试和发布模式下运行 Clean Solution。
我在 VS2013 中看不到 <MvcBuildViews>false</MvcBuildViews>
@DotNetDreamer 我遇到了同样的问题。但是我手动添加了它,并且还使用了 this question 的 Chris Hynes 的回答。
在我们的例子中,我们必须删除bin
和obj
文件夹以消除@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 的“分步”指南。我不知道这是否是您的目标,但它肯定会让您朝着正确的方向前进。
【讨论】:
这个答案现在已经过时了,你现在应该参考这篇文章:blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html【参考方案4】:是的,这是可能的。事实上,我能想到的最好的例子就是电子邮件模板引擎。如果您编译和缓存模板,那么您可以快速撕掉电子邮件,而无需重新进行解析。
这也是在 MVC 之外使用 Razor 的一个很好的例子。
【讨论】:
你能链接到一个例子吗?以上是关于可以编译 Razor 视图吗?的主要内容,如果未能解决你的问题,请参考以下文章