2014-06-20 48 views
4

我正在使用Tfs 2012来构建/部署我们的Asp.Net Web应用程序。我们有一个构建定义,可以构建5个解决方案(.sln文件)。这是我们的MSBuild参数看起来怎么样:如何参数化Tfs中的DeployIisAppPath 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}" 

我需要部署的所有5个站点使用Web部署此构建定义。当然,它们共享除DeployIisAppPath之外的所有参数。它适用于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?

我试图传递的参数作为{siteName} .Web.csproj fo的属性每一个也都是属性。

任何帮助将不胜感激。

+0

如果有人遇到这个,就像我做的那样,并且在VS2010中工作,而不是在2012年。 对于我来说,解决方案是停止覆盖msbuild参数并在web项目的“Package/Publish web”选项卡中简单配置它属性。在'网络部署包设置'下,有一个名为'IIS网站/应用程序名称在目标服务器上使用'的设置。我想知道2012年删除这些设置的理由是什么。 – TygerKrash

回答

5

做到这一点的可能方法之一是提出自己的一套参数。让我们说,我们称它们为DeployIisAppPath_One,DeployIisAppPath_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" ... 
+0

嗨,这工作就像一个魅力:-)。感谢您花时间回复。 –

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

希望这有助于!

相关问题