MSBuild-项目依赖项生成顺序异常

MSBuild-项目依赖项生成顺序异常,msbuild,dependencies,Msbuild,Dependencies,我们有一个MSBuild.proj文件,用于构建和运行许多项目。具有彼此的文件引用的。由于它是文件引用,因此我们维护解决方案上的项目依赖项列表,以便MSBuild能够识别在中执行项目的顺序 我们最近遇到了一个问题,我们的美国开发团队为一个项目添加了一个新的引用,但没有更新依赖项列表。这可以在本地和服务器上为它们构建良好的性能。然而,对于英国团队来说,所有开发人员的构建都失败了 我想知道为什么会这样。我能想到的唯一一件事是,当两个项目本质上处于同一级别时,我们的文化导致构建顺序略有不同。i、 e.

我们有一个MSBuild.proj文件,用于构建和运行许多项目。具有彼此的文件引用的。由于它是文件引用,因此我们维护解决方案上的项目依赖项列表,以便MSBuild能够识别在中执行项目的顺序

我们最近遇到了一个问题,我们的美国开发团队为一个项目添加了一个新的引用,但没有更新依赖项列表。这可以在本地和服务器上为它们构建良好的性能。然而,对于英国团队来说,所有开发人员的构建都失败了

我想知道为什么会这样。我能想到的唯一一件事是,当两个项目本质上处于同一级别时,我们的文化导致构建顺序略有不同。i、 e.如果项目A和B被认为具有相同的依赖性,那么这两个内置项的顺序是任意确定的,这在英国文化和美国文化中可能是不同的

这就是说,我的机器坏了,它为我设置了区域格式为英语美国。地点和英国


这听起来可行吗?或者对此有更好的解释吗?

更改区域性将无法解决以下问题:您对组件输出进行文件引用,而不是对将生成程序集的项目进行项目引用

解决方案文件不映射依赖项,并将帮助MsBuild确定生成顺序。当MsBuild处理解决方案时,它将首先在内存中将其转换为MsBuild xml格式,然后通过列出依赖项来确定项目顺序,然后通过比较输入文件和输出文件的上次更新时间来确定是否需要重建项目


当项目中的项目内有项目引用时,请打开“引用”文件夹,删除对输出程序集的引用,而不是引用项目本身。这将修改项目文件,将引用项组替换为项目引用项组。这允许MsBuild在项目级别上进行此确定,并解决了必须手动配置项目生成顺序的问题。

不幸的是,由于各种原因,我们的解决方案中通常不使用项目引用。我们有数百个项目,通常使用构建解决方案的不同解决方案打开-其中一个解决方案中的项目使用项目引用,但节之间的引用使用文件引用。因此,如果项目A依赖于项目B的输出,但使用文件引用而非项目引用,您不知道在编译时是否有来自项目B的最新代码。这只是一些管道,你可以添加,使你的生活更容易。在过去,我不得不在包含超过100个项目的解决方案中这样做。这看起来确实是一项艰巨的任务,但如果不再坚持错误的范例,将为您省去很多痛苦:我们的构建被配置为在每个构建上都一笔勾销,从头开始,所以这不是一个主要问题。我很想改用增量版本,但我相信该公司在过去已经受到了它的影响,所以我想继续使用完全干净的版本。我相信切换到文件引用是因为我们在开发中使用更小、更集中的解决方案——当您将项目引用从解决方案中移除时,项目引用喜欢尝试移除它们自己。您的团队使用哪种单元测试策略,完整构建时间有多长?必须等待四分钟才能确定代码更改是否对单元测试产生影响,这将是一个问题,它将推动支持增量构建的计划:对于SSD,构建时间大约为4分钟。如果没有,它们可能需要大约20分钟。单元测试很少,但最近才推出。然而,这超出了我的控制范围,而不是当前问题的焦点。虽然我很想做出改变,但我就是做不到。我需要理解为什么构建在这里失败,而不是在拥有相同文件的池塘上失败。