2013-02-15 57 views
5

我正在使用TFS 2012自动构建包含多个Windows服务和两个Web应用程序的解决方案。使用TFS团队自定义拖放文件夹结构

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

  1. \ dropserver \ droproot \ MyApp的\ BuildNumber \
    • \服务1
    • \客服2
    • \服务3
    • \服务4

这个伟大的工程,但不幸的是它不适用于网络应用程序。如果我对这些策略使用相同的策略,则只需获取每个Web应用的/ bin的内容,而不是完整的站点内容。

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

有没有人做过类似的事情,并获得它与Web应用程序一起工作呢?

+2

你能在记事本中打开你的网站项目,并检查以下是在那里: 2013-02-18 13:45:21

回答

1

有了一些自定义的,这个方案最终为我工作:

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

基本上没有该链接推荐什么,但还利用新的解决方案的配置(我称之为TeamBuild),而不是条件属性定义。

我相信让这一切工作的关键是将outputDirectory作为MSBuild的TeamBuildOutDir参数传递。将此变量引用嵌入OutDir或OutputPath变量允许Team Build构建到正确的登台位置,然后自动将文件从该位置复制到drop文件夹。

我打算稍微深入一点,摆脱整个_PublishedWebSites的东西,但那完全是在构建工作流程中完成的。

编辑: TFS 2013支持这本身具有简单的构建配置选项:

enter image description here

+0

我也使用了EdSquared解决方案,效果很好。我强烈推荐它。注释中有一些重要的细节(即OutDir属性必须以尾部斜线结尾等)。 – efisher 2014-01-06 21:31:18

1

我想我可以提供帮助,它看起来像构建目标中发布的网站文件夹不会创建,如果OutDir与OutputPath相同。

所以这不是完美的,但如果你添加以下到在第一组中的csproj文件,你会得到一切部署到“\ BIN \部署\”,包括_PublishedWebsites文件夹

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

现在这给人打预防针......为什么我需要指定这两次? – RMD 2013-02-18 19:01:48

+0

我将此添加到我的proj文件,但它似乎没有任何区别。当我在VS中构建“TeamBuild”配置时,我将二进制输出复制到我的目标目录结构中,但其余的web文件(html,js,css,图像等)都没有复制。 – RMD 2013-02-18 19:03:06

+0

对不起,我错过了更多的东西,这实际上并不是要解决它。我做了一个我认为会有所帮助的修改 - 尽管它并不完美。 – 2013-02-18 19:38:19

0

看看这个帖子也是这篇文章。 Team Build: Publish locally using MSDeploy 因为你需要为你的web项目中的所有文件,你需要触发发布过程,并通过调整该过程的目标,你可以有你的所有文件复制的,你需要他们。 我认为他的答案中的选项(2)适合你。 我希望有所帮助。

0

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

如果您想在_PublishedWebSites文件夹下获得.html,.css,.js等,您需要执行Web部署。这手动,我们可以通过点击您的VS项目的右键菜单中的选项publish并选择发布方法文件系统做。

但是,由于您需要在构建中将其自动化并将其放入自定义放置文件夹中,因此您可能需要通过调用AspNetCompiler任务来操作MSBuild脚本。你可以在MSDN link更多相关信息。通过指定TargetPath当你调用这个目标就可以得到部署在相应的定制投递文件夹您的Web文件。

快乐脚本。

相关问题