【发布时间】:2011-12-16 12:45:12
【问题描述】:
有时我的构建会因此错误而失败。
0>MSBUILD : error MSB4166: Child node "3" exited prematurely. Shutting down.
它似乎是完全随机的,我无法随意复制它。我正在运行 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
我可以在 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()
【问题讨论】:
-
我也遇到了同样的问题。我还看到了与此错误相关的内存不足异常。将其限制为一个同时构建并没有帮助。它仍然出错:See the screenshot here;当内存消耗超过物理可用内存时,就会发生错误。它与死亡进行了几次近距离接触,然后达到最大值并死亡,同时关闭了 Outlook 和进程资源管理器,提供了一个无法启动的 JIT 调试器,并释放 MSBuild.exe 成为坐在内存中的僵尸进程直到我手动杀死它。
-
奇怪的是,我在具有 4GB 物理和“无限”虚拟 RAM 的 64 位 Win7 笔记本电脑上使用 64 位 MSBuild。 MSBuild 进程正在使用大约 1GB 的 RAM(峰值为 1.5GB)。
-
我在 32 位 WinXP 桌面上使用 32 位 MSBuild,具有 2GB 物理和类似无限的虚拟 RAM。奇怪的是,当物理 RAM 完全用完时会发生崩溃。就像我的虚拟内存为零!
-
是的,似乎 MSBuild 没有使用虚拟内存 :)
-
但事实并非如此。我检查了它,如果它有 800MB 的可用物理内存,它在这个问题上失败了。
标签: multithreading msbuild msbuild-4.0