Optimization MSBuild加速:如何删除不必要的项目生成?
我有一个包含几个项目的解决方案。比方说 项目A依赖于项目B和项目C 项目B依赖于项目C 当我在本地机器上运行我的解决方案时,VS构建每个项目一次,需要1分钟。然而,在我们的构建机器上,构建大约需要4分钟,正如我从MSBuild日志中了解到的,它是这样的: 构建A->为A构建B,为A构建C 构建B->为B构建C 所以它多次构建一些项目。。。如何加快构建过程Optimization MSBuild加速:如何删除不必要的项目生成?,optimization,tfs,msbuild,Optimization,Tfs,Msbuild,我有一个包含几个项目的解决方案。比方说 项目A依赖于项目B和项目C 项目B依赖于项目C 当我在本地机器上运行我的解决方案时,VS构建每个项目一次,需要1分钟。然而,在我们的构建机器上,构建大约需要4分钟,正如我从MSBuild日志中了解到的,它是这样的: 构建A->为A构建B,为A构建C 构建B->为B构建C 所以它多次构建一些项目。。。如何加快构建过程 另外,这不是一个额外3分钟的问题,我只是想知道为什么它与我的本地机器构建如此不同?也许像我们的一样,您的构建服务器是一个虚拟机(至少慢10倍)
另外,这不是一个额外3分钟的问题,我只是想知道为什么它与我的本地机器构建如此不同?也许像我们的一样,您的构建服务器是一个虚拟机(至少慢10倍)
此外,TFS(可能还有其他的)会在构建时进行新的签出,因此它必须构建所有的项目。可能像我们的一样,您的构建服务器是一个虚拟机(至少慢10倍)
此外,TFS(可能还有其他人)在构建时会进行新的签出,因此它必须构建所有的项目。我不确定您的构建顺序。有时候TeamBuild看起来像是在一次又一次地构建项目,但它是为不同的配置构建的。看一看,确保您没有定义多个构建 此外,如果不希望每次都执行新的签出和重新生成,可以在TFSBuild文件的底部定义
<PropertyGroup>
<IncrementalBuild>true</IncrementalBuild>
</PropertyGroup>-->
真的
-->
把它放在
标签前面。我不确定您的构建顺序。有时候TeamBuild看起来像是在一次又一次地构建项目,但它是为不同的配置构建的。看一看,确保您没有定义多个构建
此外,如果不希望每次都执行新的签出和重新生成,可以在TFSBuild文件的底部定义
<PropertyGroup>
<IncrementalBuild>true</IncrementalBuild>
</PropertyGroup>-->
真的
-->
把它放在
标签前面。您使用的是/maxcpucount开关吗?本地计算机和生成计算机之间的处理器数量可能有所不同。msbuild文件和visual studio设置之间的此设置也可能不同,这也可以解释您在生成时间中看到的差异。是否使用/maxcpucount开关?本地计算机和生成计算机之间的处理器数量可能有所不同。msbuild文件和visual studio设置之间的此设置也可能不同,这也可以解释您在生成时间中看到的差异。此示例似乎适合我。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>
诀窍是使用项目的“构建”目标,而不是“重建”。这些命令之间的区别本质上与VisualStudio中的Build菜单中的“Build”和“Rebuild”命令之间的区别相同
编辑
如果项目包含在解决方案文件中,并且您指定了要生成的解决方案,则此操作也很有效:
<Target Name="Build">
<MSBuild Targets="Build" Projects="TestLib.sln" />
</Target>
这个示例似乎适合我。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>
诀窍是使用项目的“构建”目标,而不是“重建”。这些命令之间的区别本质上与VisualStudio中的Build菜单中的“Build”和“Rebuild”命令之间的区别相同
编辑
如果项目包含在解决方案文件中,并且您指定了要生成的解决方案,则此操作也很有效:
<Target Name="Build">
<MSBuild Targets="Build" Projects="TestLib.sln" />
</Target>
我这样做如下。这是一个有点复杂的定制构建系统,但其基本思想是
也许这可以帮助你实现你想要的。我这样做如下。这是一个有点复杂的定制构建系统,但其基本思想是
也许这可以帮助您实现您想要的。您使用什么工具在构建机器上构建?您可以手动控制生成顺序吗?我有一个msbuild的配置文件,它指定SolutionToBuild。。。其他一些东西,但没有特定的构建顺序。可能是您正在服务器上进行重建,并且只在您的机器上进行构建