使用TFS Team Build自定义Drop文件夹结构

时间:2013-02-15 16:45:54

标签: tfs msbuild tfs2012 team-build

我正在使用TFS 2012来自动构建包含多个Windows服务和两个Web应用程序的解决方案。

我使用了我发现here的指南来自定义构建过程模板,以便将windows服务放在我喜欢的文件夹结构中。具体做法是:

  1. \ dropserver \ droproot \ MyApp的\ BuildNumber \
    • \ Service1
    • \服务2
    • \服务3
    • \服务4
  2. 这很有效,但遗憾的是它不适用于Web应用程序。如果我使用相同的策略,我只是获取每个Web应用程序的/ bin内容,而不是完整的网站内容。

    MSBuild通常使用Web应用程序目标来处理这个问题,但由于某些原因,当您自定义构建时,这不起作用。我不再在构建输出中获得_PublishedWebSites文件夹。 (我猜这是因为我清除了MSBuild任务的OutDir属性。)

    有没有人做过这样的事情,并且还使用它来处理Web应用程序?

5 个答案:

答案 0 :(得分:1)

我想我可以帮忙解决这个问题,如果OutDir与OutputPath相同,那么在构建目标中看起来不会创建已发布的网站文件夹。

所以这并不完美,但是如果你将以下内容添加到第一个属性组的csproj文件中,你将把所有内容部署到“\ bin \ deploy \”,包括_PublishedWebsites文件夹

<DeployOnBuild>True</DeployOnBuild>
<OutDir>bin\deploy\</OutDir>

答案 1 :(得分:1)

通过一些自定义,这个解决方案最终为我工作:

http://www.edsquared.com/2011/01/31/Customizable+Output+Directories+For+TFS+2010+Build.aspx

基本上,做了那个推荐的链接,但也利用了新的解决方案配置(我称之为TeamBuild)而不是条件属性定义。

我认为使这一切成功的关键是将outputDirectory作为TeamBuildOutDir参数传递给MSBuild。在OutDir或OutputPath变量中嵌入此变量引用允许Team Build构建到正确的分段位置,然后自动将文件从该位置复制到drop文件夹。

我将进一步采取这一点,摆脱整个_PublishedWebSites的事情,但这将完全在构建工作流程中完成。

编辑:TFS 2013通过简单的构建配置选项本地支持此功能:

enter image description here

答案 2 :(得分:0)

看看这个帖子也是这篇帖子。 Team Build: Publish locally using MSDeploy 由于您需要Web项目的所有文件,因此需要触发发布过程,并通过调整该过程的目标,可以将所有文件复制到需要的位置。 我认为他的回答中的选项(2)对你有用。 我希望有所帮助。

答案 3 :(得分:0)

正如我在您的参考link中看到的那样,它只会编译和打包二进制文件。它不会按照上述步骤部署网站。

如果要在_PublishedWebSites文件夹下获取.html,.css,.js等,则需要执行 Web部署。我们可以通过单击VS项目右键菜单中的publish选项并选择发布方法作为文件系统来手动执行此操作。

但是,由于您需要在构建中自动执行此操作并将其放在自定义drop文件夹中,因此您可能需要通过调用AspNetCompiler任务来操作MSBuild脚本。您可以在MSDN link获取有关此内容的更多信息。通过在调用此目标时指定TargetPath,可以将Web文件部署到相应的自定义drop文件夹中。

快乐脚本。

答案 4 :(得分:0)

你有没有看过这个博客,这解决了我想要自定义TeamBuild输出目录的问题。 Customizable O/P with TFS 2013

Customizaable O/P with TFS 2012 and .NET Framework 4.5