1

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

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

1)我已经尝试了一些东西,比如修改我的 DefaultTemplate.xaml,只是发现(因为我只指定了 .sln 文件)我无法区分每个项目级别的输出路径。(在工作流程中,有一个带有 serverBuildProjectItem 变量的“对于 BuildSettings.ProjectsToBuild 中的每个项目” - 尽管将 .sln 文件作为我的项目,但这仅被调用一次。)因此这无法区分每个项目基础。

在此处输入图像描述

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

4

1 回答 1

1

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

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

您可以使用几种方法

  • 为每个项目发布构建事件 - 您可能会提供 2 组操作,一组用于在 tfs 上的本地构建其他人 - 您的方法 3,以区分您可以使用的模式(有不同的方式和在哪里可以做到这一点有优势可从项目属性编辑)

内置 tfs(在 VS 之外)

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

关于它的讨论:BuildingInsideVisualStudio Property Value Not Working With File Reference 和 Project Reference Conditional

  • 添加或添加链接插件文件作为项目从源代码控制中的相对中心位置到每个项目的插件文件夹,定义项目构建操作可能为 copyifnewer/always 内容
于 2013-02-27T15:55:54.823 回答