我有一个由50个以上的类库和〜10个SharePoint WSP项目组成的大型解决方案。我试图优化构建时间,因为默认情况下,它需要5分钟以上体面的服务器硬件。构建包含仅存在于解决方案中的项目子集中的目标的解决方案
目前,生成过程是这样的(伪):
MSBuild.exe MySolution.sln /T:Clean
MSBuild.exe MySolution.sln /T:Build
foreach (Project.csproj in *.csproj where is WSP project)
{
MSBuild.exe Project.csproj /T:CleanPackage
MSBuild.exe Project.csproj /T:Package
}
我想实现的就是做这一切使用单一MSBuild.exe
调用,从而使构建过程可以被并行化和重复处理在包装WSP项目时被避免。
我可以为一个WSP项目做到这一点很容易:
MSBuild.exe Project.csproj /T:Clean;CleanPackage;Build;Package
然而,当我做整体解决方案相同:
MSBuild.exe MySolution.sln /T:Clean;CleanPackage;Build;Package
MSBuild的失败并报告错误,只要它在解决方案文件中找到不包含CleanPackage
目标的项目:
D:\ MySolution \ Clas s.Library.Project \ Class.Library.Project.csproj:错误MSB4057:目标“CleanPackage”在项目中不存在。
所以,问题是,如何解决这个问题,实现了单命令行生成调用无)进行手动更改所有csproj
文件(维护梦魇),B)编写自定义复杂的构建脚本?我正在考虑定义一个包含一个自定义Target
的主构建文件。但是,我不确定如何在解决方案文件中向项目表达正确的依赖关系,而无需手动枚举两个组(类库,WSP项目)中的所有单个项目。
注:虽然我的问题是类似this one,我决定继续以覆盖绩效结果它的开放和自我回答。
通过调用重建目标而不是使用Clean/Build调用MSbuild两次来加速构建(一点点),最终结果是相同的。对于其他部分:应该是一个相当简单的MSbuild主脚本,但是具有Package目标的项目必须以特定顺序调用吗?它们是相互依赖于Package对象还是只依赖Build对象? – stijn
@stijn(1)'重建':小细节,不完全是我正在解决的问题,以及我已经摆脱的问题。 (2)不,他们不相互依赖。 SharePoint WSP软件包是最终产品 - 一行“exe”。但是,它们每个都依赖于解决方案中的多个类库项目。 –
@stijn换句话说,我需要帮助的是“相当简单的MSbuild主脚本”,因为这是一个我以前不需要太多介入的工具。 –