【发布时间】:2016-08-08 21:55:21
【问题描述】:
我们已经设置了带有构建服务器的 TFS (2015),并且有几个构建的解决方案(一些是手动的,另一些是自动的)。
有时构建会莫名其妙地失败,有很多错误表明缺少程序集,如下所示:
The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
要修复它,我只需要再次排队构建。无需编辑,无需签入,只需“排队新构建”即可成功构建。
它可能发生在手动构建、自动构建、单个构建或构建多个解决方案时。我看不出任何可识别的模式来解释为什么会发生这种情况。我不认为这是一个 nuget 问题,因为当构建服务器在下载 nuget 包时失败时,我们会看到不同的错误(此外,nuget 是否甚至用于下载 System.Runtime?我假设该库在服务器上很容易获得?)
正如我所说,解决这个问题很容易,但我们正在使用持续集成和自动部署 (Octopus) 来简化我们的发布周期,当构建错误蜂鸣器开始响起时,这些“假”错误非常烦人。
【问题讨论】:
-
您使用的是新的基于 Web 的构建系统还是旧的 XAML 构建系统?
-
你在使用多个构建服务器吗?
-
所以对你的构建脚本/解决方案等一无所知,这是一个疯狂的猜测,但由于这是随机的,所以很有可能。您是否启用了 MSBUILD 并行编译?如果是,您是否在解决方案文件中正确定义了所有项目依赖项?如果启用了并行构建(MSBUILD /m 或 /maxcpucount 开关)并且如果您没有正确定义依赖项,则依赖项目有可能比它的依赖项之一更早构建。
-
@Isaiah4110 我在 UI 中看不到并行构建的任何选项,并且构建参数中没有 cpucount 或并行度的开关,所以我不得不假设我们没有在并行,除非默认开启我们使用基于 Web 的构建系统,并且我们有多个构建服务器
-
你能分享你的构建步骤吗?错误会出现在哪一步?