我正在使用TFS 2012来自动构建包含多个Windows服务和两个Web应用程序的解决方案。
我使用了我发现here的指南来自定义构建过程模板,以便将windows服务放在我喜欢的文件夹结构中。具体做法是:
这很有效,但遗憾的是它不适用于Web应用程序。如果我使用相同的策略,我只是获取每个Web应用程序的/ bin内容,而不是完整的网站内容。
MSBuild通常使用Web应用程序目标来处理这个问题,但由于某些原因,当您自定义构建时,这不起作用。我不再在构建输出中获得_PublishedWebSites文件夹。 (我猜这是因为我清除了MSBuild任务的OutDir属性。)
有没有人做过这样的事情,并且还使用它来处理Web应用程序?
答案 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通过简单的构建配置选项本地支持此功能:
答案 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