我有一个包含多个项目的解决方案。我们说
项目A取决于项目B和C
项目B取决于项目C
当我在本地计算机上运行我的解决方案时,VS构建每个项目一次,需要1分钟。但是,在我们的构建机器上,构建需要大约4分钟,正如我从MSBuild日志中可以理解的那样,它是这样的:
构建A - >为A构建B,为A构建C
构建B - >为B构建C
所以它多次构建一些项目......我怎样才能加快构建过程?
P.S。这不是额外3分钟的问题,我只是想知道为什么它与我的本地机器构建有如此不同?
答案 0 :(得分:3)
我不确定您的构建顺序。有时TeamBuild看起来像是在反复构建项目,但它正在为不同的配置构建。看一看,确保没有定义多个FlavorsToBuild。
此外,如果您不想每次都进行新的检查和重建,可以在TFSBuild文件的底部定义。
<PropertyGroup>
<IncrementalBuild>true</IncrementalBuild>
</PropertyGroup>-->
将其放在</Project>
标记之前。
答案 1 :(得分:1)
此示例似乎对我有用。 TestLib.Extra依赖于TestLib。如果我在TestLib中更改某些内容,则两个项目都将构建。如果我只在TestLib.Extra中更改,那么只会构建一个,如果我根本不更改任何内容,他们只会报告跳过目标“CoreCompile”,因为所有输出文件都是最新的等等。
<Target Name="Build">
<MSBuild Targets="Build" Projects="TestLib\TestLib.csproj" />
<MSBuild Targets="Build" Projects="TestLib.Extra\TestLib.Extra.csproj" />
</Target>
诀窍是使用项目的“Build”目标,而不是“Rebuild”。它们之间的差异与Visual Studio中构建菜单中“构建”和“重建”命令之间的差异基本相同。
修改强>
如果项目包含在解决方案文件中,并指定要构建的解决方案,这也很有效:
<Target Name="Build">
<MSBuild Targets="Build" Projects="TestLib.sln" />
</Target>
答案 2 :(得分:0)
也许和我们一样,您的构建服务器是虚拟机(至少10倍速度)。
此外,TFS(以及其他人)可以对构建进行全新检查,因此无论如何都必须构建所有项目。
答案 3 :(得分:0)
您使用的是/ maxcpucount开关吗?本地计算机与构建计算机之间的处理器数量可能存在差异。您的msbuild文件和visual studio设置之间的设置也可能不同,这也可以解释您在构建时看到的差异。
答案 4 :(得分:0)
我这样做如下。这是一个有点复杂的自定义构建系统,但基本的想法是。
也许这可以帮助您实现自己想要的目标。