如何告诉TFS部署多个包含在一个解决方案中的webapp?

Ola*_*laf 16 iis msbuild visual-studio-2010 tfs2010 webdeploy

我们有一个解决方案,其中包含一个webapp项目和一些附带的项目.我们的TFS 2010每晚都在构建此解决方案,并将Web应用程序部署到IIS服务器.它像微风一样奔跑.

在TFS构建定义的Process选项卡中,您可以指定"MSBuild Arguments".这是我们的构建定义中设置的值(全部在一行中):

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:CreatePackageOnPublish=True 
/p:MSDeployPublishMethod=WMSVC
/p:MSDeployServiceUrl=<service url of IIS> 
/p:DeployIisAppPath="<a website>" 
/p:UserName=<domain>\<user 
/p:Password=<password> 
Run Code Online (Sandbox Code Playgroud)

这篇博客文章解释了整个设置:http: //vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html.

到现在为止还挺好.

现在我们已经添加了第二个webapp项目,我们希望每晚都将它部署到同一个IIS中.不幸的是,在这种情况下,设置不适用.TFS只部署一个webapp.

还有其他人有同样的问题:

当解决方案具有多个Web应用程序时,TFS 2010 + MSDeploy

WebDeploy部署多个网站

Vishal R. Joshi建议为每个webapp项目添加一些属性.现在,发布版本将为每个webapp项目生成webpackage(zip文件),该项目具有以下定义的属性:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DeployOnBuild>True</DeployOnBuild>
    <DeployTarget>Package</DeployTarget>
    <CreatePackageOnPublish>true</CreatePackageOnPublish>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

好.但是如何让TFS将每个webapp部署到IIS呢?还有其他想法吗?

小智 13

正如Vishal在您自己链接的博客文章中所描述的那样,所有MSBuild参数都可以在csproj中移动.这意味着每个项目都可以拥有自己的设置.

我有一个包含6个项目,4个类库和2个Web(WCF和MVC应用程序)的解决方案.我遵循Vishal博客的指令,只是将我的所有MSBuild参数移动到每个csproj文件中..即

  <PropertyGroup>
    <DeployOnBuild>True</DeployOnBuild>
    <DeployTarget>MsDeployPublish</DeployTarget>
    <CreatePackageOnPublish>True</CreatePackageOnPublish>
    <MSDeployPublishMethod>InProc</MSDeployPublishMethod>
    <MSDeployServiceUrl>localhost</MSDeployServiceUrl>
    <DeployIisAppPath>Dev.Auzzy\Web</DeployIisAppPath>
    <UserName>Username</UserName>
    <Password>Password</Password> 
    ...
Run Code Online (Sandbox Code Playgroud)

确保然后从构建定义中删除参数.

然后,TFS按预期部署..将每个项目放入指定为每个IIS站点的主目录的正确文件夹中.

另外值得注意的是,您不能像上面那样在PropertyGroup中包含DeployIisAppPath,而是使用项目的属性页面为每个构建配置指定此项.(右键单击每个项目>"属性">"包/发布Web").


Kho*_*yen 5

这个问题我花了2天时间.我找到了一个适合我的简单解决方案.

我使用名为DeployMvc1,DeployMvc2的解决方案配置管理器创建了另外2个配置.在DeployMvc1中取消选中MVC2项目的构建,并在DeployMvc2中取消选中MVC1项目的构建.

接下来,我创建了2个构建定义DeployMvc1Build和DeployMvc2Build.第一个用于监听MVC1项目

/p:DeployObBuild=true
/p:Deploytarget=MsDeployPublish
/p:Configuration=DeployMvc1
/p:Platform="Any CPU"
/p:MSDeployPublishMethod=WMSvc
/p:MsDeployServiceUrl="https://{server1}:8172/MsDeploy.axd"
/p:DeployIisAppPath="mvc1"
/p:AllowUntrustedCertificate=True
/p:Username="{username}"
/p:Password={password}
Run Code Online (Sandbox Code Playgroud)

第二个用MV监听MVC2项目

/p:DeployObBuild=true
/p:Deploytarget=MsDeployPublish
/p:Configuration=DeployMvc2
/p:Platform="Any CPU"
/p:MSDeployPublishMethod=WMSvc
/p:MsDeployServiceUrl="https://{server2}:8172/MsDeploy.axd"
/p:DeployIisAppPath="mvc2"
/p:AllowUntrustedCertificate=True
/p:Username="{username}"
/p:Password={password}
Run Code Online (Sandbox Code Playgroud)

然后我的问题解决了.


Mik*_*gel 0

一种选择是将其写入 MSBuild 任务中。通过这种方式,您可以支持多个 IE 无限 webapp 部署。我还没有移植我们现有的项目文件来执行此操作,这就是为什么我没有遇到这个问题。无论如何,这里有一篇文章概述了该过程:

文章

希望有帮助