我不是TeamBuild的专家。我知道我问的问题可能很愚蠢。
我有一个VS2010解决方案,包含10多个控制台应用程序和3个ASP.NET Web应用程序项目。 我在TFS2013.2服务器上设置了TeamBuild,其中包含以下选项:
以drop文件夹结尾的文件是:
我想要构建给我:
我的想法是使用默认的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:.)
谢谢; - )
答案 0 :(得分:1)
对于第一个问题(将每个项目的输出分成单个文件夹),最好的方法是使用TFS 2013默认模板,该模板有一个标志,可以将每个项目内置的解决方案放入一个单独的文件夹然后,为每个应用程序制作解决方案。假设一个解决方案由一个应用程序及其所有依赖项组成,而不是多个应用程序。 “黄金法则”是:每个解决方案一个应用程序。
对于使用TFS2013构建过程模板时遇到的构建失败问题,请确保在该服务器上安装了VS2013 Update 2 - 我对该主题的研究表明这是一个问题。
对于第二个问题,您可能不希望使用web.config转换。理想情况下,您只需要构建一次二进制文件,然后就可以将它们部署到多个环境中 - 唯一的区别因素是配置文件。如果您正在使用web.config转换,则您获得的配置文件取决于您正在构建的平台。为每个环境构建都存在一些问题:
这里最好的办法是控制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版本不理解。
感谢您的回复,@丹尼尔曼!