Tfs 团队构建:使用MSDeploy在本地发布

Tfs 团队构建:使用MSDeploy在本地发布,tfs,msbuild,release,publish,msdeploy,Tfs,Msbuild,Release,Publish,Msdeploy,我刚刚开始使用TeamBuild功能,我发现做一些非常简单的事情所需的工作量有点大。我目前的设置是一个包含web应用程序、组装应用程序和测试应用程序的解决方案。web应用程序有一个PublishProfile设置,通过文件系统发布 我设置了一个TFS构建定义,目前每晚构建整个解决方案,并将其作为旧构建的备份放到网络共享上。我现在想做的就是让我已经设置好的PublishProfile为我发布web应用程序。我相信这确实很简单,但我已经玩了一整天MSBuild命令,运气不好。救命啊 您可以在Visu

我刚刚开始使用TeamBuild功能,我发现做一些非常简单的事情所需的工作量有点大。我目前的设置是一个包含web应用程序、组装应用程序和测试应用程序的解决方案。web应用程序有一个PublishProfile设置,通过文件系统发布


我设置了一个TFS构建定义,目前每晚构建整个解决方案,并将其作为旧构建的备份放到网络共享上。我现在想做的就是让我已经设置好的PublishProfile为我发布web应用程序。我相信这确实很简单,但我已经玩了一整天MSBuild命令,运气不好。救命啊

您可以在Visual Studio 2010中使用发布/部署


有关详细信息,请参见。很遗憾,MSBuild不支持或实现发布配置文件的共享。从概要文件发布的逻辑包含在VS本身中。幸运的是,该配置文件不包含太多信息,因此有一些方法可以实现您所寻找的目标。我们的目标并不具体支持发布对话框所遵循的完全相同的步骤,但是为了从团队构建中获得相同的结果,您有两个选择,我将在这里概述这两个步骤

为了部署而设置团队生成定义时,需要为生成过程的MSBuild参数传入一些值。请参见下面我突出显示的图像。

选项1: 传入以下参数:

/p:DeployOnBuild=true;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\\sayedha-w500\BuildDrops\Publish";AutoParameterizationWebConfigConnectionStrings=false
让我解释一下这些参数,向您展示结果,然后解释下一个选项。
DeployOnBuild=true
:这告诉项目执行
DeployTarget
属性中定义的目标

DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder
:指定部署目标

PackageTempRootDir=“\\sayedha-w500\BuildDrops\Publish”
:指定将写入包文件的位置。这是在打包文件之前写入文件的位置

AutoParameterizationWebConfigConnectionStrings=false
:这告诉Web发布管道(WPP)不要在Web.config文件中参数化连接字符串。如果未指定此项,则连接字符串值将替换为占位符,如$(ReplacableToken\u dummyConStr-Web.config连接字符串\u 0)

完成此操作后,您可以启动构建,然后在PackageTempRootDir位置内,您将找到一个PackageMP文件夹,其中包含您正在查找的内容

选项2: 因此,对于上一个选项,您可能注意到它创建了一个名为PackageTmp的文件夹,如果您不希望这样做,则可以使用以下选项

/p:DeployOnBuild=true;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;_PackageTempDir="\\sayedha-w500\BuildDrops\Publish";AutoParameterizationWebConfigConnectionStrings=false
这里的区别是,您将传入
\u PackageTempRootDir
而不是
PackageTempRootDir
。我之所以不建议这样做,是因为以u开头的MSBuild属性表示该属性本质上是“内部”的,即在将来的版本中,它可能意味着其他内容或根本不存在。因此,使用风险自负

选项3

综上所述,您可以使用构建来打包您的web。如果要执行此操作,请使用以下参数

/p:DeployOnBuild=true;DeployTarget=Package
当您在构建的drop文件夹中执行此操作时,您将像通常一样找到_PublishedWebsites文件夹,然后在该文件夹中会有一个{ProjectName}文件夹包,其中{ProjectName}是项目的名称。此文件夹将包含包、.cmd文件、参数文件和其他几个文件。您可以使用这些文件来部署web


我希望这不是信息过载。

发布网站、配置IIS以及为开发->质量保证->发布周期推送架构更改的能力要求自定义配置以模拟发布,或者在涉及IIS设置的情况下自定义代码

从Visual Studio 2013.2开始,Microsoft添加了一个第三方产品,该产品使用windows workflow管理网站部署、配置更改和数据库部署,是从TFS build自动部署的推荐解决方案

更多信息可在此处找到:


但这不会通过文件系统发布,它假设已经创建了Web.Deploy.cmd,这在我的案例中没有发生。我已经有了一个选项,当我右键点击web应用并选择Publish for Publish Method:File System时,我只想插入其中。太棒了!和这些人玩了一玩,有一些事情要考虑。更好地了解到底发生了什么。要么使用这个,要么在IIS6盒子上安装msdeploy,然后走那条路。谢谢你,我一直在寻找这个答案,我终于找到了你的帖子!唯一缺少的是它没有创建PrecompliedApp.config文件。如果发布配置文件指定了预编译DAPP程序集,这些是必需的吗?我不明白为什么TeamBuild没有完成发布配置文件所做的一切,比如XmlTransformations。我们已经成功地使用了选项2一段时间了。但是,我们刚刚开始使用Swashback为WebApi项目生成Swagger文档,这种发布方法并没有将.xml文档文件复制到打包的webapp的bin目录中(Swashback需要)。经过一番挖掘,我发现在命令行上需要传递
/p:excludemmlassemblyfiles=false
。当我读到这个答案时,我想,“这个家伙应该写一本书。”而你做到了!你应该拿出一个更新版本。我会买的。