可以编译 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 中看不到 &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 的“分步”指南。我不知道这是否是您的目标,但它肯定会让您朝着正确的方向前进。

【讨论】:

这个答案现在已经过时了,你现在应该参考这篇文章:blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html【参考方案4】:

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

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

【讨论】:

你能链接到一个例子吗?

以上是关于可以编译 Razor 视图吗?的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 3.0:Razor 视图不会在更改时自动重新编译

Razor视图引擎

Razor 页面运行时编译不起作用

禁用 Razor View 编译

ASP.NET MVC5 视图预编译

[@ Razor View中的@代码标记抛出编译器错误