【问题标题】:TFS 2010 Build a solution with different paths for some projectsTFS 2010 为某些项目构建具有不同路径的解决方案
【发布时间】:2013-02-27 23:55:54
【问题描述】:

我有一个用于 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 相对于指定的放置位置)

【问题讨论】:

    标签: msbuild tfsbuild


    【解决方案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 and Project Reference Conditional

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

    【讨论】:

    • 谢谢,这对我有用。我为我的机器上的构建指定了我现在想要的输出路径,对于构建机器上的构建,我有构建后事件。在花了一些时间弄清楚哪些变量具有哪些值之后。
    • 在您的情况下,将插件文件放在项目插件文件夹中可能更“干净”的方法 - 这样做的限制是如果您需要它们出现在输出中的位置与项目 - 例如您不想存储在项目根目录中,但需要位于应用程序的根目录中。
    猜你喜欢
    • 2012-06-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2014-04-23
    • 2016-07-10
    • 2014-08-11
    • 2018-05-24
    相关资源
    最近更新 更多