TFS 2010为某些项目构建具有不同路径的解决方案

时间:2013-02-27 14:48:55

标签: msbuild tfs2010 tfsbuild

我有一个解决方案,我用于TFS 2010(构建服务器)的构建任务。

大多数项目都可以在同一个位置结束,唯一不同的是一些动态加载的插件,它们应该在/ Plugins子文件夹中相对于其他程序集。

1)我尝试过一些东西,比如修改我的DefaultTemplate.xaml,但却发现,(因为我只指定了.sln文件)我无法区分每个项目级别的输出路径。 (在工作流程中,有一个“BuildSettings.ProjectsToBuild中的每个项目”和一个serverBuildProjectItem变量 - 只有.sln文件作为我的项目才调用一次。)所以这不能区分每个项目基础。

enter image description here

2)我尝试的另一件事是将OutputPath指定为某处作为解决方案。

<OutputPath Condition=" '$(CommonOutputPath)'=='' ">../myOutDir/Plugins/</OutputPath>
<OutputPath Condition=" '$(CommonOutputPath)'!='' ">$(CommonOutputPath)Plugins\</OutputPath>

这使得所有程序集都保留在服务器构建的同一文件夹中,因此不起作用。

3)我开始创建一个post-build事件来手动将文件复制到正确的位置,但到目前为止无法区分服务器案例和本地案例。 (这在这里不起作用。)

<PropertyGroup Condition=" ' $(TeamBuildConstants) ' == ' '>
<PostBuildEvent>mkdir $(SolutionDir)..\out\$(OutDir)plugins
copy $(TargetPath) $(SolutionDir)..\out\$(OutDir)plugins
</PropertyGroup>
<PropertyGroup Condition=" ' $(TeamBuildConstants) ' == '_TEAM_BUILD_ '>
echo figure out some copying for this once the condition gets hit..
<PostBuildEvent></PostBuildEvent>
</PropertyGroup>

如何更改项目文件或配置构建工作流程以使其工作? (然后应该在本地以及服务器构建中工作。)

我想要的: 将所有标准程序集放在同一个文件夹中,将所有插件项目放在./Plugins/子文件夹中吗? (本地,相对于项目文件(默认?),tfs-build相对于指定的放置位置)

1 个答案:

答案 0 :(得分:1)

从2010年推出基于工作流程的tfs构建版本,他们与msbuild之间存在很大的区别 - 使用msbuild编译项目及其内容,使用工作流程组装deplopyment包。

由于您声明这应该运行localy,这意味着编译需要插件才能成功/项目工作,因此应该在解决方案级别处理它们。

您可以使用几种方法

  • 每个项目的后期构建事件 - 您可能会提供2组操作,一组用于本地构建其他的tfs - 您的aproach 3,以区分您可以使用的模式(有变化的方式和位置这样做一个具有可从项目属性中编辑的优点)

在tfs中构建(在VS之外)

<PostBuildEvent> IF NOT "$(BuildingInsideVisualStudio)" == "true" ( YourActions ) </PostBuildEvent>

讨论:BuildingInsideVisualStudio Property Value Not Working With File Reference and Project Reference Conditional

  • 添加或添加链接插件文件作为源控件中相对中心位置的项目到每个项目的插件文件夹,定义项目构建操作可能作为copyifnewer / always content