![]() |
1
44
我刚刚在博客上写了另一个方法: http://mikehadlow.blogspot.com/2009/06/tfs-build-publishedwebsites-for-exe-and.html 但是如果你不想费心去跟踪这个链接,这里就有完整的链接: 在单个Uber解决方案中收集您的团队控制下的所有代码是一个很好的做法,如本模式和实践PDF《使用TFS的团队开发指南》中所述。如果您随后配置TFS构建服务器来构建此解决方案,则其默认行为是将构建输出放入单个文件夹中,即释放。 解决方案中的任何Web应用程序项目也将输出到名为“PublishedWebsites”的文件夹。这非常好,因为这意味着您可以简单地使用robocopy部署Web应用程序。 不幸的是,对于WinForms、控制台或库等其他项目类型,没有类似的默认行为。如果我们能有一个_PublishedApplications\Sub文件夹来输出任何选定的项目,那就太好了。幸运的是,这并不难做到。 发布网站的工作方式非常简单。如果您查看Web应用程序的项目文件,您会注意到底部附近有一个导入:
在我的计算机上,msbuildExtensionsPath属性的计算结果为c:\program file s\msbuild,如果我们打开microsoft.webapplication.targets文件,我们可以看到它是一个非常简单的msbuild文件,当生成不是桌面生成时,即它是一个tfs生成,并将输出复制到:
我只是简单地复制了micrsoft.webapplication.targets文件,用项目文件中的相对路径将其置于源代码管理之下,并将“已发布的网站”更改为“已发布的应用程序”,并重命名了文件ci.exe.targets。对于要输出到_publishedApplications的每个项目,我只需在项目文件底部添加此导入:
您可以编辑ci.exe.targets(或您想称之为的任何内容)来进行竞价。在我的例子中,到目前为止唯一的改变是添加几行来复制app.config文件:
在microsoft.webapplication.targets中有很多东西只与web应用程序相关,并且可以为其他项目类型去掉,但是我会把它作为练习留给读者。 |
![]() |
2
35
TFS 2012+我喜欢这个解决方案…
编辑生成定义。在“过程”部分下,设置
这样地:
|
![]() |
3
10
默认情况下,每个项目文件(*.csproj、*.vbproj等)都指定一个默认输出目录(通常是bin\debug、bin\release等)。team build实际上会覆盖这一点,这样您就不会对开发人员在项目文件中设置的属性心血来潮,而且team build还可以对输出的位置进行假设。 覆盖此行为的最简单方法是在SolutionToBuild项组中将CustomizableOutDir设置为true,如下所示:
这将使放置文件夹结构与构建解决方案时在本地得到的结构大致匹配。 此方法绝对比覆盖可能导致升级问题的核心*目标更可取。 |
![]() |
4
6
对于每个solutiontobuild节点,将属性outdir设置为$(outdir)\subfolder
(此项工作于2008年,但不适用于2005年。) |
![]() |
5
5
我在派对上回答这个问题有点晚了,但是有一个非常简单的方法来实现迈克·哈德洛的答案。有人写了一个Nuget包,完全按照Mike所说的做。你可以在这里找到它: http://www.nuget.org/packages/PublishedApplications |
![]() |
6
4
更新tfs 2010(以及即将推出的tfs 2012)。JasonStanloome写了一篇不错的博客,概述了如何做到这一点。 http://blog.codeassassin.com/2012/02/03/override-the-tfs-team-build-outdir-property/ (上面的链接已断开…链接到缓存版本)
|
![]() |
7
1
对于那些好奇这如何与TFS 2010一起工作的人, this 《邮报》有几个答案,其中一个答案对我来说很有用。 |
![]() |
8
0
每个项目可以有一个buildscript,这将完全满足您的需要。 只需创建一个新的tfsbuild文件,将您想要构建的项目添加到itemgroup(按照您想要的构建顺序),设置输出的位置。这是通过重写tfsbuild文件中的-property来完成的。 但是我也同意前面的海报——为什么不运行一个构建脚本,在最后添加一个zip任务呢?为每个项目维护一个buildscript会增加维护开销… |
![]() |
9
0
在属性组中吊起此:
它将重写全局“customizableoutdir”属性,默认情况下,该属性设置为false。在SolutionToBuild的属性中设置此项将不起作用。 |
![]() |
10
-2
您可以通过覆盖默认的coredropbuild目标实现来实现这一点。 在tfsbuild.proj文件(默认情况下存储在teambuildtypes/<build type>下)中添加以下目标:
在这个目标中,您可以根据需要操作输出。默认情况下,只需将所有内容从$(binariesroot)\$(buildType)复制到$(dropLocation)\$(buildNumber)。 我通常使用 Microsoft.Sdc.Tasks project 用于文件复制功能。 |
![]() |
11
-3
简单解决方案: 将所有<solutiontobuild>节点替换为<solutiontopublish>。当然,这只适用于可发布的项目(如Web项目和应用程序),而不适用于库项目。 就这么简单:) |
![]() |
urlreader · 是否将自定义列添加到TFS中的UI? 6 年前 |
![]() |
Mkram · Microsoft TFS研究 6 年前 |
![]() |
ab_732 · TFS如何从代码审阅中排除DLL和代码注释/空白 6 年前 |
![]() |
gvdm · 如何控制TFS的配置 6 年前 |
![]() |
Buda Gavril · SonarQube分析任务更改构建的输出 6 年前 |