错误MSB4166:子节点提前退出.关机

Lud*_*dwo 27 msbuild multithreading msbuild-4.0

有时我的构建会因此错误而失败.

 0>MSBUILD : error MSB4166: Child node "3" exited prematurely. Shutting down.
Run Code Online (Sandbox Code Playgroud)

它似乎是完全随机的,我无法随意重现它.我正在运行VS2010 Win7 x64 MSBuild 4.0,但这个问题似乎是平台和操作系统无关.我正在并行构建解决方案(/ m switch + BuildInParallel = True),我不想禁用此功能,因为我正在编译包含800多个项目的应用程序.知道怎么解决吗?

编辑:当我安装.NET 4.5开发人员预览时,MSBuild 4.5中的错误日志记录得到了改进,现在错误字符串如下所示:

error MSB4166: Child node "3" exited prematurely. Shutting down. Diagnostic information may be found in files in the temporary files directory named MSBuild_*.failure.txt
Run Code Online (Sandbox Code Playgroud)

我可以在Temp文件夹中找到错误日志文件.这是MSBuild _*.failure.txt文件的内容:

System.InvalidOperationException: BuildEventArgs has formatted message while serializing!
   at Microsoft.Build.Framework.LazyFormattedBuildEventArgs.WriteToStream(BinaryWriter writer)
   at Microsoft.Build.Framework.BuildMessageEventArgs.WriteToStream(BinaryWriter writer)
   at Microsoft.Build.Shared.LogMessagePacketBase.WriteToStream(INodePacketTranslator translator)
   at Microsoft.Build.BackEnd.NodeEndpointOutOfProcBase.PacketPumpProc()
Run Code Online (Sandbox Code Playgroud)

Fab*_*one 7

经过大量的时间和研究试图解决此问题,我找到了一个对我有用的解决方案。我将msbuild与/ m和/ p:BuildInParallel = true一起使用,并且CI服务器中的构建失败。在第二个组件中总是失败,并显示以下错误:

错误MSB4166:子节点“ 3”过早退出。闭嘴

添加/ nodeReuse:false可解决此问题。

这是一个很好的参考:https : //blogs.msdn.microsoft.com/msbuild/2007/04/16/node-reuse-in-multiproc-msbuild/

  • 詹金斯甚至在最后都停止冻结每座建筑物。两只鸟和一块石头。“ MSBUILDDISABLENODEREUSE = 1”或“ -nodeReuse:false”必须在构建机器上。 (2认同)

Dav*_*gan 1

您可能会耗尽内存,导致构建子进程之一失败 - 如果您使用 /m:2 将其限制为两个并发构建,失败是否会减少?(假设你有超过2个核心)

或者,如果您可以从另一台机器借用一些 RAM,或者增加交换大小,那么当您在构建机器上安装更多内存时,这种情况发生的频率是否会降低?