VS,TFS和TeamBuild模板版本之间的兼容性?

时间:2014-06-14 10:05:39

标签: .net visual-studio tfs tfsbuild alm

声明:

我不是TeamBuild的专家。我知道我问的问题可能很愚蠢。

我目前拥有什么

我有一个VS2010解决方案,包含10多个控制台应用程序和3个ASP.NET Web应用程序项目。 我在TFS2013.2服务器上设置了TeamBuild,其中包含以下选项:

  • TeamBuild模板是默认的TFS2010 DefaultTemplate.xaml
  • 它定位解决方案文件

以drop文件夹结尾的文件是:

  • 控制台应用程序的所有exes和配置文件
  • 一个_PublishedWebsites文件夹,每个Web应用程序项目包含一个文件夹。请注意,web.config XML转换已完成

我想要什么

我想要构建给我:

  • 每个控制台应用程序一个文件夹
  • web.config XML转换

我的想法是使用默认的TFS2013构建模板TfvcTemplate.12.xaml设置新构建,因为我看到有一个选项指定输出应该基于PerProject。 由于MSBuild无法构建Web项目,构建失败,并出现与WebDeploy相关的错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets (3009): Web deployment task failed. (Unknown ProviderOption:DefiningProjectFullPath. Known ProviderOptions:.)

我的问题

  • 通过TFS2013构建模板构建VS2010解决方案失败是否正常?
  • WebDeploy似乎没有参与TFS2010默认构建模板,但是它与TFS2013构建模板一起使用是正常的吗?
  • 如果没有,是否可以在.csproj文件中进行一些调整以使它们由TFS2013构建模板构建?
  • 我是否必须将目标文件更新为V12版本,因为它是构建它的TFS2013?

我的潜在答案

  • 我的构建服务器上安装了WebDeploy 3.5,我已经开始工作了。
  • 所有目标文件都在适当位置

谢谢; - )

2 个答案:

答案 0 :(得分:1)

对于第一个问题(将每个项目的输出分成单个文件夹),最好的方法是使用TFS 2013默认模板,该模板有一个标志,可以将每个项目内置的解决方案放入一个单独的文件夹然后,为每个应用程序制作解决方案。假设一个解决方案由一个应用程序及其所有依赖项组成,而不是多个应用程序。 “黄金法则”是:每个解决方案一个应用程序。

对于使用TFS2013构建过程模板时遇到的构建失败问题,请确保在该服务器上安装了VS2013 Update 2 - 我对该主题的研究表明这是一个问题。

对于第二个问题,您可能不希望使用web.config转换。理想情况下,您只需要构建一次二进制文件,然后就可以将它们部署到多个环境中 - 唯一的区别因素是配置文件。如果您正在使用web.config转换,则您获得的配置文件取决于您正在构建的平台。为每个环境构建都存在一些问题:

  1. 它耗费更多时间 - 如果您的构建需要10分钟才能运行,并且您必须为4个环境中的每个环境运行一次,那么您最后只需要30分钟就可以获得不同的配置文件。
  2. 它引入了风险 - 如果构建服务器上的某些内容发生了变化,或源代码管理中的某些内容发生了变化突然间,您发布的二进制文件与您测试的二进制文件不同。
  3. 维护起来比较困难。您必须拥有许多不同的构建定义和一堆不同的解决方案平台。你需要维护的东西越多,搞乱的可能性就越大。
  4. 这里最好的办法是控制web.config文件的多个版本,每个环境一个,然后在部署时选择适当的配置文件。

    另一种方法是使用支持配置文件标记化的工具 - 这样,您就有一个配置文件,其中只包含可以在发布时用适当的值替换的标记。但这需要您可能不感兴趣的其他工具和配置。

答案 1 :(得分:1)

我今天想通了,感谢Sayed Ibrahim Hashimi的blog post。 基本上,它解释了当您使用VS2012或VS2013打开VS2010解决方案时对.csproj所做的修改。链接到.targets文件,在这种情况下Microsoft.WebApplication.targets是相对于用于打开解决方案的VS版本。

由于我正在处理的解决方案仅适用于VS2010,我指向的.targets文件是VS2010特定版本,位于
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets

我手动编辑了3个Web应用程序项目的.csproj文件以包含Sayed的修改,然后基于TFS2013默认构建模板的构建就像魅力一样。

我的猜测:TFBuild2013正在传递一些WebDeploy MSBuild任务的参数,该任务是.targets文件的VS2010版本不理解。

感谢您的回复,@丹尼尔曼!