ASP NET MVC 4 Razor Views 预编译花费大量时间

Posted

技术标签:

【中文标题】ASP NET MVC 4 Razor Views 预编译花费大量时间【英文标题】:ASP NET MVC 4 Razor Views Precompilation taking an insane amount of time 【发布时间】:2021-12-18 17:47:58 【问题描述】:

我问这个问题只是因为我已经尝试了所有其他与慢速剃须刀编译相关的问题中提出的每一个解决方案(在 SO 和 MSDN 上),但我完全迷路了。

上下文:

我有一个 ASP NET MVC 4 (.NET Framework 4.6.2) 项目,在 .csproj 的发布配置中启用了 Razor 视图预编译:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <MvcBuildViews>true</MvcBuildViews>
</PropertyGroup>

IDE 是 Visual Studio 2019 版本 16.11.75.64347

在从功能分支完成合并之前一切正常。在此合并之后,当我在 Release 中编译项目时 配置视图会花费大量时间(40 多分钟)进行编译。编译时,我可以在“输出”窗口中看到缓慢出现的常用代码警告(未使用的变量、无法访问的代码等...),因此它似乎并没有停留在单个任务上,但它只是非常缓慢地编译所有意见。

如果我在 Debug 中运行项目,视图不会被预编译,因此项目会立即启动,但每个页面的每次首次加载都会再次花费大量时间(每页 3 分钟以上) )。无论您如何调用它,Razor 视图编译似乎都需要很长时间。

问题

在预编译视图和在运行时编译时,Razor View (.cshtml) 编译需要永远进行。

我尝试了什么:

阅读此处的所有其他问题以及我尝试过的其他论坛:

    删除项目解决方案中的 .vs 文件夹 清理解决方案并重新启动 VS\computer 更改 IIS Express 使用的端口 删除“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”中的所有文件 删除“C:\Users\USER\AppData\Local\Temp\Temporary ASP.NET Files”中的所有文件 删除“C:\Users\USER\AppData\Local\Microsoft\WebSiteCache”中的所有文件 删除项目目录中的 bin 和 obj 文件夹 以管理员身份运行 VS 在 VS 设置中启用和禁用 Just My Code 从“C:\Program Files (x86)\IIS Express”清除缓存和站点

附加信息:

当“卡住”编译视图时,我的 CPU (i7) 保持在 20-30% 左右,而 Visual Studio 使用 2-6%,因此 CPU 绝对不是这里的瓶颈。磁盘是SSD。内存为 16GB。

我的同事,和我运行相同的代码库,没有任何问题,编译时间正常。

任何其他项目(甚至是同一项目的原始分支,合并后导致问题的那个)都没有同样的问题。

部署相同应用程序的 BuildAgent(显然是在 Release 配置中)没有任何问题,所以这显然与我的设置有关。

【问题讨论】:

【参考方案1】:

经过更多故障排除后,我们找到了解决方案:我将 NuGet 包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 从版本 1 升级到版本 2.0.1进行此更改后,编译时间恢复到可以接受的水平(启用视图预编译的完整发布版本大约需要 2\3 分钟)。

老实说,我不知道 nuget 包如何仅在我的工作站上导致这样的问题。我什至卸载了 VS2019,删除了工作区并重新安装了 VS2022,但问题仍然只影响我的工作站。

【讨论】:

以上是关于ASP NET MVC 4 Razor Views 预编译花费大量时间的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 3、Razor 视图和可移植区域

为啥 ASP.NET MVC3 区域和 Razor 视图会产生此错误?

尝试从 ASP.NET Core MVC Razor 中的 _Layout 页面重定向时出错

如何在 asp.net MVC 4 Razor 中绑定剑道网格

如何在 ASP.NET MVC 4 Razor 项目的视图中显示集合?

[Asp.Net Core]MVC_Razor布局