【问题标题】:Project TargetDir on TFS build serverTFS 构建服务器上的项目 TargetDir
【发布时间】:2015-10-23 20:41:07
【问题描述】:

我在我的 VS2012 项目文件中使用 Pre-/Post-build 事件来执行构建任务。 这在本地工作得很好,但我从 TFS 2012 Build Server 运行它时遇到问题。

在本地,每个项目的 $(TargetDir) 设置为自己的 /bin 文件夹。

然而,在构建服务器上,这被设置为解决方案根文件夹之外的单个 /bin 文件夹,它整合了所有已构建的二进制文件。

这根本不是我想要的!
我只是希望构建服务器与我的 VS2012 构建的行为方式相同
构建模板中似乎没有任何设置可以让我改变它。

谁能告诉我如何让构建服务器将其二进制文件输出到每个项目的单独 /bin 文件夹中?

(仅供参考,构建服务器设置为构建 .sln 文件,而不是一些额外的 MSBuild 脚本。)

【问题讨论】:

    标签: tfsbuild


    【解决方案1】:

    TFS 和 Visual Studio 都使用 msbuild 来构建您的解决方案,但是构建输出的文件夹结构不同。输出与 VS 结构不同的原因是因为 TFS 构建模板覆盖了 $(OutDir) 属性以指向构建代理上的“二进制”文件夹。

    在 TFS 2012 / .net 4.5 中,您可以通过在构建定义 /p:GenerateProjectSpecificOutputFolder=true 中传递 msbuild 参数来控制此行为

    更多信息请见this blog

    【讨论】:

    • 这几乎是我需要的。但是我的 PRE-BUILD 事件仍然被破坏,似乎特定项目 bin\Debug 文件夹“填充”为时已晚。我已经正确设置了依赖项并且它可以在我的机器上运行。有什么想法吗?
    【解决方案2】:

    这是因为 MSBuild 和 TFSBuild 是两种不同的产品 - 在您的本地计算机上,MSBuild 用于构建您的项目。

    我用来解决这个问题的一种方法是更详细一点,并结合使用ProjectDirConfigurationName。这是一个我正在复制一些配置文件的实际示例:

    robocopy "$(ProjectDir)bin\$(ConfigurationName)" "...目标文件夹..." *.config

    (请注意,我已经删除了目标路径,这对示例来说不是必需的)

    无论程序集是针对 AnyCPU 还是 x86/64,这都有效,因为 Microsoft 的惯例是在文件夹名称中包含斜杠。

    【讨论】:

    • 问题是 TFSBuild 根本没有在 $(ProjectDir) 中创建任何 bin 文件夹。它只构建到 obj 文件夹和 $(SolutionDir) 和 $(ProjectDir) 之外的合并 bin 文件夹。但是,我现在使用 $(TargetDir) 来定位合并的 bin 文件夹。感谢您的意见。
    猜你喜欢
    • 2017-04-16
    • 2018-02-24
    • 1970-01-01
    • 2016-12-21
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2014-02-28
    相关资源
    最近更新 更多