Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization MSBuild加速:如何删除不必要的项目生成?_Optimization_Tfs_Msbuild - Fatal编程技术网

Optimization MSBuild加速:如何删除不必要的项目生成?

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倍)

我有一个包含几个项目的解决方案。比方说

项目A依赖于项目B和项目C

项目B依赖于项目C

当我在本地机器上运行我的解决方案时,VS构建每个项目一次,需要1分钟。然而,在我们的构建机器上,构建大约需要4分钟,正如我从MSBuild日志中了解到的,它是这样的:

构建A->为A构建B,为A构建C

构建B->为B构建C

所以它多次构建一些项目。。。如何加快构建过程


另外,这不是一个额外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>

我这样做如下。这是一个有点复杂的定制构建系统,但其基本思想是

  • 在许多解决方案中重用的DLL构建到一个已知的文件夹中。这是通过使用生成这些公共DLL的msbuild项目文件实现的
  • 在解决方案中构建其他csproj文件时,我们复制csproj文件,然后使用xslt操作将项目引用替换为这些常见dll的dll引用
  • 然后,构建脚本使用我们维护的与每个解决方案对应的自定义msbuild项目文件构建这些更改的csproj文件。我们不生成.sln文件。这些自定义项目文件是一组.csproj文件,其依赖顺序正确

  • 也许这可以帮助你实现你想要的。

    我这样做如下。这是一个有点复杂的定制构建系统,但其基本思想是

  • 在许多解决方案中重用的DLL构建到一个已知的文件夹中。这是通过使用生成这些公共DLL的msbuild项目文件实现的
  • 在解决方案中构建其他csproj文件时,我们复制csproj文件,然后使用xslt操作将项目引用替换为这些常见dll的dll引用
  • 然后,构建脚本使用我们维护的与每个解决方案对应的自定义msbuild项目文件构建这些更改的csproj文件。我们不生成.sln文件。这些自定义项目文件是一组.csproj文件,其依赖顺序正确

  • 也许这可以帮助您实现您想要的。

    您使用什么工具在构建机器上构建?您可以手动控制生成顺序吗?我有一个msbuild的配置文件,它指定SolutionToBuild。。。其他一些东西,但没有特定的构建顺序。可能是您正在服务器上进行重建,并且只在您的机器上进行构建