如何在Tfs Build中将DeployIisAppPath Msbuild参数进行参数化

4

我正在使用Tfs 2012来构建/部署我们的Asp.Net Web应用程序。我们有一个构建定义,用于构建5个解决方案(.sln文件)。以下是我们的MsBuild参数:

/p:DeployOnBuild=True /p:AllowUntrustedCertificate=True /p:DeployIisAppPath="Test"         /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=WMSVC /p:MSDeployServiceUrl="https://{server}:8172/msdeploy.axd" /p:UserName="{user}" /p:Password="{password}"

我需要使用此构建定义通过Web Deploy部署所有5个站点。它们共享所有参数,当然除了DeployIisAppPath。它适用于1个解决方案,但对于多个解决方案,我需要为每个解决方案输入不同的DeployIisAppPath,以便每个解决方案都可以部署到IIS中的正确站点。
我已经检查了这些问题和其他文档,但还没有找到解决方法: 如何使用不同的构建参数运行多个项目的生成 解决方案中具有多个网站项目的持续部署 如何将TFS变量传递给项目的MSBuild任务 TFS2010构建定义以部署到多个服务器? 我已经尝试将参数作为属性传递给每个sln的{siteName}.Web.csproj文件。

非常感谢您的帮助。


如果有人像我一样在使用VS2010而不是2012,遇到了这个问题,我的解决方案是停止覆盖msbuild参数,而是在Web项目属性的“Package/Publish web”选项卡中进行配置。在“Web部署包设置”下,有一个名为“用于目标服务器上的IIS网站/应用程序名称”的设置。我想知道在2012年删除这些设置的理由是什么。 - TygerKrash
2个回答

5

有一种可能的方法是制定自己的参数集。比如说,我们可以称之为DeployIisAppPath_OneDeployIisAppPath_Two等等。只要这些名称是唯一的,任何名称都可以使用。

然后,在需要部署的每个项目文件中进行小的编辑。在第一个<PropertyGroup>部分中添加以下行。例如,在第一个项目中添加:

<DeployIisAppPath Condition="'$(DeployIisAppPath_One)' != ''">$(DeployIisAppPath_One)</DeployIisAppPath>

在第二个项目中,同样地:
<DeployIisAppPath Condition="'$(DeployIisAppPath_Two)' != ''">$(DeployIisAppPath_Two)</DeployIisAppPath>

对于所有您想要部署的项目,请按此操作。现在,您的新命令行应该如下所示:

msbuild ... /p:DeployIisAppPath_One="MySite/one" /p:DeployIisAppPath_Two="MySite/two" ...

嗨,这个工作得很好 :-). 谢谢你抽出时间回复。 - artist_dev

1
你应该为解决方案中的每个 Web 项目添加发布配置文件。之后,你可以设置以下构建参数:
/p:DeployOnBuild=True
/p:PublishProfile=Development
/p:Password=password-of-your-deploy-user-as-earlier-entered-with-publish-profile

重要的是 /p:PublishProfile,这必须是先前创建的发布配置文件的名称。现在,在构建时,MSBuild将查找发布配置文件(在本例中为“Development”),并使用它来发布网站。
完整指南请参阅:http://www.johandorper.com/log/publish-multiple-webprojects-on-build 希望这可以帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接