dotnet publish/build执行无限循环冻结,Visual Studio可正常运行
执行dotnet publish "{projectFilePath}" --configuration Release --output "{outputPath}"或dotnet build时,构建过程中途冻结;添加--verbosity diag参数后,发现build和publish均陷入无限循环且无固定卡点。但Visual Studio IDE可正常编译运行应用,无任何问题或警告。
自上次稳定构建后,代码库有以下关键变更:
- 曾在Web应用同解决方案中添加NUnit项目,现已卸载、移除并删除,且已清除应用中所有相关引用
- 更新了多个NuGet包,IDE中运行无影响,但存在多个NU1701警告,示例:
PATH.csproj : warning NU1701: Package 'XAct.IO 1.1.17040.3290' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8, .NETFramework,Version=v4.8.1' instead of the project target framework 'net7.0'. This package may not be fully compatible with your project.
已尝试但未解决问题的方案:
- 删除bin和obj文件夹,清理并重新构建解决方案
- 清除NuGet包后重新加载更新
- 以管理员身份重启Visual Studio
- 在PowerShell和NuGet包管理器控制台中执行dotnet命令
- 重启计算机
- 创建新解决方案并导入Web应用项目
- 将.csproj中所有NuGet包版本恢复到上次稳定构建版本,清理并重新构建
1. 定位NU1701警告包的兼容性问题
NU1701警告的包是针对.NET Framework编译的,在.NET 7环境下可能触发构建死循环:
- 逐个移除这类.NET Framework兼容包,每次移除后执行
dotnet build测试是否仍冻结 - 确认导致问题的包后,替换为.NET 7兼容的替代包,或查找该包是否有.NET Standard/.NET Core版本
2. 清理项目中残留的NUnit配置
即使删除了NUnit项目,项目文件或解决方案文件可能仍有残留配置:
- 打开Web项目的.csproj文件,搜索
NUnit、Test相关节点(如<PackageReference>、<ItemGroup>中的测试配置),全部删除 - 打开.sln文件,检查是否存在已移除项目的残留条目,手动清除
3. 调整dotnet CLI构建参数
绕过可能触发循环的构建环节:
- 执行
dotnet build --no-incremental,禁用增量构建,强制完全构建 - 先执行
dotnet restore确保包还原完成,再执行dotnet publish --no-restore跳过还原步骤
4. 分析构建日志的循环节点
多次执行dotnet build --verbosity diag > build.log,对比多份日志:
- 找到重复出现的最后几条日志,定位反复执行的MSBuild目标(Target)
- 根据循环的目标,检查.csproj中是否存在自定义MSBuild任务或目标导致死循环
5. 切换.NET SDK版本测试
可能是当前使用的.NET 7 SDK版本存在兼容性bug:
- 安装另一版本的.NET 7 SDK(如从7.0.100切换到7.0.400)
- 使用
global.json锁定SDK版本,再次执行dotnet build测试
内容的提问来源于stack exchange,提问作者Eli Sternbach

