自定义特定项目的构建构建输出

时间:2014-02-12 15:53:16

标签: tfs2013

我有一个解决方案,其中包含许多2个Windows控制台项目,1个网站项目和20个类库。

我希望TFS 2013只将windows控制台和网站项目的drop文件夹推送到drop文件夹。

我正在寻找类似于下面的文件夹结构。

DropFolder
    - App1
    - App2
    - Website1

配置TFS以实现此目的的最佳方法是什么?

由于

更新

我最终使用nuget包http://www.nuget.org/packages/PublishedApplications来处理我想要发布的所有项目。这会将项目复制到_PublishedApplications文件夹中。所以我有一个像这样的文件夹结构

DropFolder
    _PublishedApplications
        - App1
        - App2
    _PublishedWebsites
        - Website1

2 个答案:

答案 0 :(得分:3)

  • 默认模板在“处理”选项卡“高级”部分下具有Solution Specific Build Outputs属性。 Solution Specific Build Outputs

  • 或者,您可以让MSBuild控制您的构建流程。

<强>更新

答案 1 :(得分:1)

我也使用过PublishedApplications NuGet包,但遇到了问题。如果引用的库的Content标记为Copy Always,则所有内容都将复制到根文件夹而不是分层结构。例如,如果您有以下项目和结构(为简洁起见省略了一些文件):

PublishLib
    test
        TextFile1.txt (marked as Content/CopyAlways)

TestPublishTargetApp - references PublishLib
    targets
        Microsoft.Application.targets

完成团队构建后,这是_PublishedApplications\TestPublishTargetApp文件夹的内容:

PublishLib.dll
TestPublishTargetApp.exe
TestPublishTargetApp.exe.config
TestPublishTargetApp.pdb
TextFile1.txt

我的期望是:

test\TextFile1.txt
PublishLib.dll
TestPublishTargetApp.exe
TestPublishTargetApp.exe.config
TestPublishTargetApp.pdb

在使用Microsoft.Application.targets摆弄一下之后,通过更改上一个<Copy SourceFiles(原文已注明),我能够得到我想要的内容:

    <!--<Copy SourceFiles="@(_SourceItemsToCopyToOutputDirectoryAlways)"
      DestinationFolder="$(ExeProjectOutputDir)"
      SkipUnchangedFiles="false"
      Retries="$(CopyRetryCount)"
      RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"/>-->

    <Copy SourceFiles="@(_SourceItemsToCopyToOutputDirectoryAlways)"
      DestinationFiles = "@(_SourceItemsToCopyToOutputDirectoryAlways->'$(ExeProjectOutputDir)\%(TargetPath)')"
      SkipUnchangedFiles="false"
      Retries="$(CopyRetryCount)"
      RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"/>

我不确定这对其他人是否有用,但对我来说这是必不可少的改变,加上PublishedApplications自2014年以来NuGet包没有改变(似乎已经放弃了项目)。