我在VS2012项目文件中使用Pre-/ Post-build事件来执行构建任务。 这在本地工作得非常好,但是从TFS 2012构建服务器运行它时遇到了问题。
在本地,每个项目的$(TargetDir)
都设置为自己的/bin
文件夹。
在构建服务器上,但是它设置为解决方案根文件夹之外的单个/bin
文件夹,在该文件夹中合并所有构建的二进制文件。
这根本不是我想要的! 我只是希望构建服务器的行为与我的VS2012构建相同 构建模板中似乎没有任何允许我更改此设置的设置。
有谁能告诉我如何让构建服务器将其二进制文件输出到每个项目的单独/bin
文件夹中?
(仅供参考,构建服务器设置为构建.sln
文件,而不是其他一些MSBuild脚本。)
答案 0 :(得分:7)
TFS和Visual Studio都使用msbuild来构建您的解决方案,但构建输出的文件夹结构是不同的。输出与VS的结构不同的原因是因为TFS构建模板会覆盖$(OutDir)属性以指向构建代理上的“二进制文件”文件夹。
在TFS 2012 / .net 4.5中,您可以通过在构建定义/p:GenerateProjectSpecificOutputFolder=true
中传递msbuild参数来控制此行为
有关详细信息,请参阅this blog
答案 1 :(得分:2)
这是因为MSBuild和TFSBuild是两个不同的产品 - 在本地计算机上,MSBuild用于构建项目。
我用来解决此问题的一种方法是更冗长,并使用ProjectDir
和ConfigurationName
的组合。这是我正在复制一些配置文件的实际示例:
robocopy“$(ProjectDir)bin \ $(ConfigurationName)”“...目标文件夹...”* .config
(请注意,我已删除了目标路径,但这不是示例所必需的)
无论程序集是针对AnyCPU还是x86 / 64,这都有效,因为Microsoft的惯例是在文件夹名称中包含斜杠。