Mac端Rider构建ASP.NET Core 2.1应用中途卡住无反应该如何解决?
你观察到的控制台软换行警告仅为现象,并非构建卡死的直接诱因,具体成因和对应解决方法如下:
问题成因
- ASP.NET Core 2.1 版本在MacOS环境下的MSBuild构建任务存在已知缺陷:部分内置的NuGet还原、资源编译逻辑会把超长的本地文件绝对路径拼接为单行输出,字符长度远超Rider控制台默认的单行处理阈值
- 适配ASP.NET Core 2.1的Rider 2018~2019版本对MacOS的终端pty接口适配存在bug:当控制台接收到无换行的超长连续输出时,软换行渲染线程会和MSBuild的输出线程出现死锁,直接导致构建进程挂起无响应
- 若项目引入了包含大量嵌入式资源、多语言本地化资源的第三方NuGet包,构建阶段的资源扫描日志会额外生成无换行的超长单行输出,会大幅提升上述死锁问题的触发概率
解决方法
临时规避方案(单次构建生效)
- 执行构建前先清空Rider构建控制台的历史输出:点击控制台右上角的垃圾桶图标清空所有日志后再触发构建
- 临时关闭控制台软换行功能:打开
Preferences > Build, Execution, Deployment > Console,取消勾选Use soft wraps in console选项,重启Rider后再执行构建
永久修复方案
- 升级Rider到2020.1及以上版本:该版本已修复MacOS环境下控制台超长行输出触发的死锁问题,同时保留了软换行的性能优化逻辑
- 升级项目的ASP.NET Core Runtime到2.1.30及以上补丁版本:微软在2.1的后续维护补丁中修复了MacOS环境下MSBuild任务输出超长无换行路径的问题
- 给构建任务添加MSBuild全局参数优化输出:打开
Preferences > Build, Execution, Deployment > Toolset and Build > MSBuild global properties,新增两个参数DisableConsoleColor=true和LoggerVerbosity=normal,降低构建日志的输出复杂度和单行内容长度
内容的提问来源于stack exchange,提问作者San Jaisy
相关产品推荐
相关产品推荐

