如何在Tfs Build中参数化DeployIisAppPath Msbuild参数

时间:2014-06-20 07:04:37

标签: msbuild tfsbuild webdeploy

我正在使用Tfs 2012来构建/部署我们的Asp.Net网络应用程序。我们有一个构建定义,可构建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个解决方案,但是对于1个以上的解决方案,我需要为每个解决方案输入不同的DeployIisAppPath,以便每个解决方案都部署到IIS中的正确站点。

我已经检查了这些问题和其他文档,但还没有运气:

Running a build against multiple projects with different build arguments

Continuous deployment with multiple website projects in solution

How to pass TFS variable to a MSBuild task of the project

TFS2010 Build Definition to Deploy to multiple servers?

我已经尝试将参数作为属性传递给每个sln的{siteName} .Web.csproj作为属性。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

执行此操作的一种可能方法是提出自己的一组参数。我们可以说,我们称之为DeployIisAppPath_OneDeployIisAppPath_Two等。只要它们是独一无二的,无论什么名称都适合您。

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

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

在第二个项目中,simalarly:

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

对要部署的所有项目重复此操作。现在,您的新命令行将如下所示:

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

答案 1 :(得分:1)

您应该向解决方案中的每个Web项目添加发布配置文件。之后,您可以设置以下构建参数:

/p:DeployOnBuild=True
/p:PublishProfile=Development
/p:Password=password-of-your-deploy-user-as-earlier-entered-with-publish-profile

重要的是/ p:PublishProfile,这必须是先前创建的发布配置文件的名称。现在,在构建时,MSBuild将查找发布配置文件(在本例中为“开发”)并使用它来发布网站。

完整指南:http://www.johandorper.com/log/publish-multiple-webprojects-on-build

希望这有帮助!