6

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

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

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

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

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

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

4

2 回答 2

7

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

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

有关更多信息,请参阅此博客

于 2013-11-02T00:52:30.753 回答
2

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

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

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

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

无论程序集是针对 AnyCPU 还是 x86/64,这都有效,因为 Microsoft 约定将斜杠作为文件夹名称的一部分。

于 2013-11-01T11:02:09.337 回答