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

问题描述:

我有一个用于TFS 2010(构建服务器)构建任务的解决方案。TFS 2010为某些项目构建具有不同路径的解决方案

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

1)我已经尝试了一些东西,比如修改我的DefaultTemplate.xaml,只是为了找出那个(因为我只指定了.sln文件),我无法区分每个项目级别的输出路径。 (在工作流中,有一个“For BuildSettings.ProjectsToBuild中的每个项目”都带有一个serverBuildProjectItem变量 - 虽然只有.sln文件作为我的项目,但这个变量只会被调用一次。)所以这不能用于区分每个项目基础。

enter image description here

2)我想一件事是指定OutputPath的地方找到一个解决方案。

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

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

3)我开始创建后生成事件,以手动将文件复制到正确的位置,但迄今未能区分服务器与本地情况。 (在这里,这是行不通的。)

<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相对于指定的放置位置)

从2010年开始,基于工作流的tfs构建引入了它们与msbuild之间的强烈区别 - 编译项目及其内容使用msbuild,将deplopyment包与工作流组合在一起。

由于您声明这应该是本地运行的,因此您的编译需要使用含义插件才能成功/项目正常工作,因此应该在解决方案级别处理它们。

有几个aproaches可以使用

  • 后生成事件,对每一个项目 - 你可能会提供2套动作一个地方上的TFS构建人 - 你的形式给出3,模式可以区分使用(有变化如何以及在哪里你能做到这其中有被从项目属性可编辑的优势)

构建TFS(VS外)

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

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

  • 添加或添加的插件文件的链接,从源头控制每个项目的插件文件夹的相对中心位置的项目,确定项目建设的行为可能是因为copyifnewer /总含量
+0

谢谢,这对我来说伎俩。我指定了我现在想要在我的机器上构建的输出路径,并且在生成机器上构建了生成后事件。花费一些时间找出哪些变量具有什么值。 – 2013-02-28 16:53:47

+0

在你的情况下,将插件文件放在项目插件文件夹中可能更“干净”的aproach - 限制这是如果你需要它们出现在输出的地方不是在项目中相同的路径 - 例如,你不想要存储在项目根目录中,但需要位于应用程序的根目录中。 – drk 2013-03-01 10:49:27