ASP NET MVC 4 Razor Views 预编译花费了大量时间
ASP NET MVC 4 Razor Views Precompilation taking an insane amount of time
我问这个问题只是因为我已经尝试了所有其他与慢速剃须刀编译相关的问题中提出的每一个解决方案(在 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+ 分钟)。在编译时,我可以在输出 window 中看到通常的代码警告慢慢出现(未使用的变量、无法访问的代码等...),因此它似乎并没有卡在单个任务上,而只是非常缓慢地编译所有视图。
如果我 运行 Debug 中的项目,视图不会进行预编译,因此项目会立即启动,但每个页面的每次首次加载都会再次带来痛苦时间量(每页 3 分钟以上)。看起来 Razor 视图编译确实需要很长时间,无论您如何调用它。
问题
Razor 视图 (.cshtml) 编译在预编译视图时和在 运行 时编译时都需要永远。
我尝试了什么:
阅读此处和我试过的其他论坛的所有其他问题:
- 删除项目解决方案中的 .vs 文件夹
- 清理解决方案并重新启动 VS\computer
- 正在更改 IIS Express 使用的端口
- 正在删除“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件”中的所有文件
- 正在删除“C:\Users\USER\AppData\Local\Temp\Temporary ASP.NET 文件”中的所有文件
- 正在删除“C:\Users\USER\AppData\Local\Microsoft\WebSiteCache”中的所有文件
- 正在删除项目目录中的 bin 和 obj 文件夹
- 运行 VS 作为管理员
- 从 VS 设置启用和禁用“仅我的代码”
- 正在从“C:\Program Files (x86)\IIS Express”清除缓存和站点
附加信息:
虽然“卡住了”编译视图,但我的 CPU (i7) 保持在 20-30% 左右,而 Visual Studio 使用 2-6%,所以 CPU 绝对不是瓶颈在这里。磁盘是SSD。内存为 16GB。
我的同事,运行使用与我相同的代码库,没有任何问题,编译时间正常。
任何其他项目(甚至是同一项目的原始分支,合并后导致问题的那个)都没有同样的问题。
部署相同应用程序的 BuildAgent(在 Release 配置中,显然)没有任何问题,所以这显然与我的设置有关。
经过更多故障排除后,我们找到了解决方案:我将 NuGet 包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
从版本 1
升级到版本 2.0.1
。
此更改后,编译时间恢复到可以接受的程度(启用视图预编译的完整发布构建需要约2 分钟)。
老实说,我不知道 nuget 包怎么会只在我的工作站上引起这样的问题。我什至卸载了VS2019,删除了工作区并重新安装了VS2022,但问题仍然只影响我的工作站。
我问这个问题只是因为我已经尝试了所有其他与慢速剃须刀编译相关的问题中提出的每一个解决方案(在 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+ 分钟)。在编译时,我可以在输出 window 中看到通常的代码警告慢慢出现(未使用的变量、无法访问的代码等...),因此它似乎并没有卡在单个任务上,而只是非常缓慢地编译所有视图。
如果我 运行 Debug 中的项目,视图不会进行预编译,因此项目会立即启动,但每个页面的每次首次加载都会再次带来痛苦时间量(每页 3 分钟以上)。看起来 Razor 视图编译确实需要很长时间,无论您如何调用它。
问题
Razor 视图 (.cshtml) 编译在预编译视图时和在 运行 时编译时都需要永远。
我尝试了什么:
阅读此处和我试过的其他论坛的所有其他问题:
- 删除项目解决方案中的 .vs 文件夹
- 清理解决方案并重新启动 VS\computer
- 正在更改 IIS Express 使用的端口
- 正在删除“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 文件”中的所有文件
- 正在删除“C:\Users\USER\AppData\Local\Temp\Temporary ASP.NET 文件”中的所有文件
- 正在删除“C:\Users\USER\AppData\Local\Microsoft\WebSiteCache”中的所有文件
- 正在删除项目目录中的 bin 和 obj 文件夹
- 运行 VS 作为管理员
- 从 VS 设置启用和禁用“仅我的代码”
- 正在从“C:\Program Files (x86)\IIS Express”清除缓存和站点
附加信息:
虽然“卡住了”编译视图,但我的 CPU (i7) 保持在 20-30% 左右,而 Visual Studio 使用 2-6%,所以 CPU 绝对不是瓶颈在这里。磁盘是SSD。内存为 16GB。
我的同事,运行使用与我相同的代码库,没有任何问题,编译时间正常。
任何其他项目(甚至是同一项目的原始分支,合并后导致问题的那个)都没有同样的问题。
部署相同应用程序的 BuildAgent(在 Release 配置中,显然)没有任何问题,所以这显然与我的设置有关。
经过更多故障排除后,我们找到了解决方案:我将 NuGet 包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
从版本 1
升级到版本 2.0.1
。
此更改后,编译时间恢复到可以接受的程度(启用视图预编译的完整发布构建需要约2 分钟)。
老实说,我不知道 nuget 包怎么会只在我的工作站上引起这样的问题。我什至卸载了VS2019,删除了工作区并重新安装了VS2022,但问题仍然只影响我的工作站。