5

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

我使用我在此处找到的指南来自定义构建过程模板,以便将 Windows 服务放入我喜欢的文件夹结构中。具体来说:

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

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

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

有没有人做过这样的事情并让它也可以与 Web 应用程序一起使用?

4

5 回答 5

1

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

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

<DeployOnBuild>True</DeployOnBuild>
<OutDir>bin\deploy\</OutDir>
于 2013-02-18T16:33:53.187 回答
1

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

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

基本上,按照该链接的建议进行操作,但也利用了新的解决方案配置(我称之为 TeamBuild),而不是条件属性定义。

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

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

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

在此处输入图像描述

于 2013-02-28T16:06:39.060 回答
0

看看这个线程和这篇文章。 Team Build:使用 MSDeploy 在本地发布 由于您需要 Web 项目的所有文件,因此您需要触发发布过程,并且通过调整该过程的目标,您可以将所有文件复制到您需要的位置。我认为他回答中的选项(2)对你有用。我希望这会有所帮助。

于 2013-02-22T19:00:56.640 回答
0

正如我在您的参考链接中看到的,它只会编译和打包二进制文件。它不会按照其中提到的步骤部署网站。

如果要获取_PublishedWebSites文件夹下的 .html、.css、.js 等,则需要进行Web 部署。这可以通过单击publishVS 项目的右键菜单中的选项并选择Publish Method as File System来手动完成。

但是,由于您需要在构建中自动执行此操作并将其放入自定义放置文件夹中,因此您可能需要通过调用AspNetCompiler任务来操作您的 MSBuild 脚本。您可以在MSDN 链接上获得更多信息。通过指定TargetPath调用此目标的时间,您可以将 Web 文件部署在适当的自定义放置文件夹中。

快乐的脚本。

于 2013-02-25T14:29:40.750 回答
0

你检查过这个博客吗,这解决了我想要自定义 TeamBuild 输出目录的问题。 使用 TFS 2013 可定制的 O/P

使用 TFS 2012 和 .NET Framework 4.5 的可定制 O/P

于 2014-10-29T10:31:36.107 回答