2

我有一个我正在尝试使用 Incredibuild 工具构建的 Visual Studio 解决方案。解决方案中的两个项目协同工作 - 第一个项目(我们将其称为“项目 A”)构建一个可执行文件(foo.exe),该可执行文件可以解析第二个项目(“项目 B”)中的数据文件以生成一些头文件。

显然,在项目 B 中定义了对项目 A 的依赖。如果我在项目 B 上使用 Incredibuild 的 Rebuild Project 选项,它会正确构建项目 A 并成功构建 foo.exe。项目 B 有一个自定义构建工具文件,它应该导致 foo.exe 使用它应该解析的文件的命令行参数运行。但是,尝试以这种方式启动 foo.exe 总是会返回错误:

自定义构建:

运行 Foo

' path to executable \foo.exe' 未被识别为内部或外部命令、可运行程序或批处理文件。

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5):错误 MSB6006:“cmd.exe”退出,代码为 9009。

有趣的是,如果我随后使用 Incredibuild构建项目 B(即使用“构建项目”选项),一切正常 - 它正确地从它在之前构建的位置选择 foo.exe,失败,构建。这让我觉得至少这条路一定没问题。

谁能建议为什么可执行文件不能作为重建的一部分运行?是否是时间问题,例如项目 B 在文件系统知道 foo.exe 之前开始?

这一切都在 Visual Studio 的常规(重新)构建下工作。只是 Incredibuild 重建失败了。请注意,我是通过 Visual Studio IDE 完成所有这些操作,而不是通过命令行。

编辑:这是我正在使用的 Incredibuild 的免费版本(Visual Studio 附带的版本),因此所有构建都在本地计算机上。

4

2 回答 2

1

最后我联系了 Xoreax 技术支持,他们告诉我这是一个“罕见但已知的问题,与我们的额外加速功能之一有关”。

他们的第一个建议是编写一个简单地休眠“几毫秒”的可执行文件,并将其作为自定义构建工具链接后的一部分运行。这确实解决了眼前的问题,但我正在构建的解决方案有许多类似的问题,并且在任何地方添加这种延迟很快变得乏味并且并不总是有效。无论如何,这感觉就像一个软糖。

所以我问这种行为是否可以关闭,确实可以。在 Visual Studio 中,Incredibuild 菜单有一个 Agent Settings 选项,在调用对话框的 Visual Studio Builds|Advanced 页面中,这是一个简单的例子,即取消选中Enhance throughput using out-of-order tasks spawning选项。

结案。

于 2016-02-01T16:46:02.743 回答
0

在构建过程中可以选择如何卸载或拦截自定义工具。尝试查看“c:\program files (x86)\IncrediBuild\Samples”

于 2019-12-13T14:46:40.533 回答