如何在解决方案中构建多个项目,每个项目具有不同的目标?

时间:2012-02-01 16:24:51

标签: tfs team-build

我正在使用具有多个项目的VS2010解决方案(普通程序集,ASP.NET MVC项目,Windows Azure项目和SQL项目)。我试图找出如何设置TFS构建定义来部署Windows Azure项目和SQL项目。

我知道如何进行Windows Azure部署,并在执行部署的Windows Azure项目文件(.ccproj)中有自定义生成任务。我可以轻松地创建一个针对.ccproj文件运行的构建定义,将一些MSBuild命令行参数作为参数传递,并按预期工作。

我可以创建另一个针对SQL项目(.sqlproj)文件运行的构建定义,并将构建和发布SQL项目所需的构建目标和参数传递给MSBuild。这符合预期。

作为两个不同的构建定义我的工作。很容易。

我还要弄清楚如何将这两个构建定义合二为一。这是否可能(没有大量工作)?理想情况下,我将能够启动一个新构建,它将构建项目并将它们(就像它们作为单独的构建定义一样)作为单个工作单元的一部分进行部署。

我已尝试将解决方案文件用作要构建的项目,并将构建目标指定为/ t:< project>:< target&gt ;;< project>:< target>。但是,显然该语法仅适用于基本集中的目标,而不适用于任何自定义目标或其他.targets文件导入的目标(或者这是我的理解)。

完成我想要做的最好(最简单)的方法是什么?

1 个答案:

答案 0 :(得分:3)

当然你完全可以做到这一点!基本上,您需要在每个项目中使用相同名称的目标。然后,为每个更改DependsOn列表以包括项目特定的目标列表。例如:

项目1:

 <Target Name="MyBuild" DependsOnTargets="AzureTarget1,AzureTarget2" />

项目2:

 <Target Name="MyBuild" DependsOnTargets="SQLTarget1,SQLTarget2" />

然后你可以告诉构建定义在每个构建定义上构建MyBuild目标,它应该调用相应的DependsOn目标。

这是一个如何执行此操作的非常简单的示例,但是如果您还使用MSBuild Traversal项目和MSBuild遍历任务,就像下面文章“构建大型源代码”中描述的方法一样,您可以使其更加健壮。树木“部分:​​

http://msdn.microsoft.com/en-us/magazine/dd483291.aspx#id0100082