我正在使用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作为属性。
任何帮助将不胜感激。
答案 0 :(得分: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" ...
答案 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
希望这有帮助!