【发布时间】:2015-02-16 11:32:45
【问题描述】:
我有一个非常奇怪且难以诊断的 MSBuild/TFS 问题。我有一个包含大约 12 种不同构建配置的解决方案。在构建服务器上运行时,构建批次可能需要 30 分钟,并且已经运行了数周,但现在偶尔会失败。
大多数时候,当它失败时会出现这样的错误:
19:25:45.037 2>TestPlanDocument.cpp(1):致命错误 C1093:API 调用“GetAssemblyRefHash”失败“0x8007000e”:错误消息:没有足够的存储空间来完成此操作。 [C:\Builds\1\ICCSim Card Test Controller\ICCSimCTC Release\src\CardTestController\CardTestController.vcxproj]
错误有时会发生在不同的文件上。它也不会发生在每个构建配置上,它非常不一致,有时甚至会成功构建所有配置。构建配置之间也没有太大差异,主要只是一些字符串更改,当然它们都可以在本地构建。
有问题的 API 调用通常 GetAssemblyRefHash 但并非总是如此。我不认为这是问题所在,因为在谷歌上搜索 GetAssemblyRefHash 几乎没有发现任何问题。我怀疑这里存在某种资源问题,但我不知道是什么:有足够的 HDD 空间(数百 GB),大量的 RAM(机器最初分配了 4GB 的最小值,但它是动态的,因为它是 Hyper -v - 它从未超过 2.5GB。为了以防万一,我将它提升到最低 8GB,但没有任何变化。
我已将构建详细程度设置为诊断,它并没有真正显示任何其他有用的信息,只是同样的错误。
作为参考,构建服务器在所有补丁上都是最新的。它运行的是 Windows Server 2012 R2,安装了 TFS 2013 和 VS 2013,两者都在更新 4 上。
此时我真的很茫然,如果有任何帮助或指点,我将不胜感激。
编辑:为了让人们了解最新情况,编译工具链处于 32 位模式,但即使切换到 64 位,问题仍然存在。
【问题讨论】:
-
您使用的是64-bit toolset吗? /MP 选项怎么样?
-
嗨 Colin - 这是一个正在构建的 32 位应用程序,但它使用的是 64 位版本的 MSBuild。我没有尝试修改 /MP 选项,目前我相信它正在使用默认值,所以也许值得玩弄。
-
我建议的解决方案修复了一些问题,这些问题在构建过程中遇到内存和文件锁定问题时会出现各种错误代码,并且可以消除尖峰资源使用。防病毒程序可能会导致类似的问题。您已经尝试了我的下一个建议,即增加 VM 中的最小 RAM。不过,我不确定这是问题所在。您的项目是否有大量的嵌入式资源?
-
有时构建服务器上的空间问题实际上并不是空间问题,您可以进入 %temp% 文件夹(用于构建代理帐户)并验证该文件夹中实际有多少文件。如果有超过 64K 的文件(不是空间,数量),就会发生一些奇怪的事情。不确定这是否有帮助,但无论如何删除文件都不会丢失。
-
@Colin Robertson:仍然对这个问题不满意。我一直在监视 GDI 对象、句柄、线程等的性能,似乎没有任何东西接近极限。我已经增加了 RAM,我已经增加了页面文件,甚至尝试将它移动到另一个磁盘但没有。该项目也没有任何大量的嵌入式资源。它有一些文本文件,每个文件可能 500 字节,仅此而已。
标签: tfs visual-studio-2013 msbuild