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

Msbuild TFS 2010为某些项目构建具有不同路径的解决方案,msbuild,tfsbuild,Msbuild,Tfsbuild,我有一个用于TFS 2010(构建服务器)构建任务的解决方案 大多数项目都可以在相同的位置结束,唯一的区别是一些动态加载的插件,它们应该位于相对于其他程序集的/plugins子文件夹中 1) 我尝试了一些事情,比如修改DefaultTemplate.xaml,结果发现(因为我只指定了.sln文件),我无法在每个项目级别上区分输出路径。(在工作流中,有一个带有serverBuildProjectItem变量的“For Each Project In BuildSettings.ProjectsTo

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

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

1) 我尝试了一些事情,比如修改DefaultTemplate.xaml,结果发现(因为我只指定了.sln文件),我无法在每个项目级别上区分输出路径。(在工作流中,有一个带有serverBuildProjectItem变量的“For Each Project In BuildSettings.ProjectsToBuild”(针对BuildSettings.ProjectsToBuild中的每个项目)-虽然将.sln文件作为我的项目,但只调用一次。)因此,这不适用于区分每个项目

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

<OutputPath Condition=" '$(CommonOutputPath)'=='' ">../myOutDir/Plugins/</OutputPath>
<OutputPath Condition=" '$(CommonOutputPath)'!='' ">$(CommonOutputPath)Plugins\</OutputPath>
。/myOutDir/插件/
$(CommonOutputPath)插件\
这会将所有程序集也保留在服务器构建的同一文件夹中,因此无法工作

<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>
3) 我开始创建一个生成后事件来手动将文件复制到正确的位置,但到目前为止无法区分服务器案例和本地案例。(这不起作用。)


一旦条件达到,echo会想出一些复制方法。。
如何更改项目文件或配置生成工作流以进行此工作?(然后应在本地以及服务器构建中工作。)

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

从2010年开始,随着基于工作流的tfs生成的引入,它们与msbuild之间有着很大的区别-使用msbuild编译项目及其内容,使用工作流组装开发包

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

有几种方法你可以使用

  • 每个项目的生成后事件-您可能会提供两组操作,一组用于本地生成,另一组用于tfs上的其他生成-您的aproach 3,以区分您可以使用的模式(有不同的方式和位置,您可以这样做此操作的优点是可以从项目属性编辑)
内置tfs(外部VS)


如果不是“$(BuildingSideVisualStudio)”=“true”(您的操作)

关于它的讨论:

  • 将插件文件作为项目从源代码管理中的相对中心位置添加或添加到每个项目的插件文件夹,将项目构建操作定义为copyifnewer/always内容

从2010年开始,随着基于工作流的tfs构建的引入,它们与msbuild之间有着很大的区别-使用msbuild编译项目及其内容,使用工作流组装开发包

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

有几种方法你可以使用

  • 每个项目的生成后事件-您可能会提供两组操作,一组用于本地生成,另一组用于tfs上的其他生成-您的aproach 3,以区分您可以使用的模式(有不同的方式和位置,您可以这样做此操作的优点是可以从项目属性编辑)
内置tfs(外部VS)


如果不是“$(BuildingSideVisualStudio)”=“true”(您的操作)

关于它的讨论:

  • 将插件文件作为项目从源代码管理中的相对中心位置添加或添加到每个项目的插件文件夹,将项目构建操作定义为copyifnewer/always内容

谢谢,这对我来说很有帮助。我现在为我的机器上的构建指定我想要的输出路径,对于构建机器上的构建,我有后期构建事件。在花一些时间弄清楚哪些变量有哪些值之后。在您的情况下,将插件文件放在project plugin文件夹中可能更“干净”一点——这方面的限制是如果您需要它们显示在输出中的位置与project中的路径不同——例如,您不想存储在project root中,但需要将其保存位于应用程序的根目录中。谢谢,这帮我搞定了。我现在为我的机器上的构建指定我想要的输出路径,对于构建机器上的构建,我有后期构建事件。在花一些时间弄清楚哪些变量有哪些值之后。在您的情况下,将插件文件放在project plugin文件夹中可能更“干净”一点——这方面的限制是如果您需要它们显示在输出中的位置与project中的路径不同——例如,您不想存储在project root中,但需要将其保存位于应用程序的根目录中。