TFS构建服务器上的Project TargetDir

Ruu*_*ier 6 tfsbuild tfs2012

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

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

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

这根本不是我想要的!
我只是希望构建服务器的行为与我的VS2012构建相同.
构建模板中似乎没有任何允许我更改此设置的设置.

任何人都可以告诉我如何使构建服务器将其二进制文件输出到/bin每个项目的单独文件夹中?

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

Jam*_*eed 7

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

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

有关详细信息,请参阅此博客


slu*_*ter 2

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

我用来解决这个问题的一种方法是更详细一点并使用ProjectDir和 的组合ConfigurationName。这是我复制一些配置文件的实际示例:

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

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

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