MSBuild和Visual Studio 2010使用MSDeploy无法部署到远程服务器

17
  • 我正在运行Visual Studio Team System 2010 RC,试图设置构建服务以构建我的解决方案并在其中部署3个Web应用程序。
  • 我创建了一个名为Integration的自定义构建配置,并在每个Web应用程序的“Package/Publish”选项卡的属性中设置了“用于目标服务器上的IIS网站/应用程序名称”。
  • 在我的构建定义中,我设置了以下参数:
  • /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MSDeployPublishMethod=InProc /p:MsDeployServiceUrl=http://my-server-name:8172/msdeploy.axd /p:EnablePackageProcessLoggingAndAssert=True

  • 然而,当我运行构建时,我得到了以下错误,对于所有三个Web应用程序:
  • 更新setAcl(MyProjectName)。

    C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3481,5): 错误 : Web部署任务失败。(尝试执行未授权的操作。)

  • 然而,我不认为这是我的实际问题。这个错误发生在日志中的下面条目之后:Updating setAcl。这是导致错误消息的原因,但似乎MSDeploy正试图在Build服务器上的本地IIS上进行部署,而不是我使用MsDeployServiceUrl参数指定的服务器。
  • 在查看C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets中的目标文件后,我添加了EnablePackageProcessLoggingAndAssert,以添加额外的日志记录。日志显示MsDeployServiceUrl的值为空字符串。我还注意到,在目标中,MsDeployServiceUrl有一个小写的s,这有点令人困惑,因为任务名称MSDeployPublish具有大写的S。我尝试使用大写字母,然后再次使用小写字母,但都不起作用。
  • 还有几件事需要注意:
  • 我的构建服务正在以NETWORK SERVICE身份运行。
  • 我尝试部署的服务器在另一个域上。
  • 我还尝试将/p:username=mydomain\myusername/p:password=mypassword添加到MSBuild参数列表中,但这并没有帮助。
  • 请问是否有人知道我是否提供了正确的参数?或者能够提供正确的参数吗?

    谢谢

    3个回答

    26

    经过多轮参数的更改,我最终找到了解决方案,并成功部署了构建。我最终使用的参数是:

    /p:DeployOnBuild=True
    /p:DeployTarget=MSDeployPublish 
    /p:MSDeployPublishMethod=**RemoteAgent** 
    /p:MsDeployServiceUrl=http://my-server-name
    /p:username=myusername 
    /p:password=mypassword
    

    看起来当使用InProc作为MSDeployPublishMethod时,MSBuild会忽略MsDeployServiceUrl并始终尝试部署到本地服务器。将它改为RemoteAgent后成功部署了。我注意到包文件不再包含在MyWebApplication_Package文件夹中,但这对我来说不是很重要。


    2
    你有找到这个信息的参考资料吗?这方面的文档非常稀少。 - felickz
    请尝试使用/p:MSDeployPublishMethod=WMSVC进行发布。 - Elan Hasson
    1
    RemoteAgent 中的那些星号是什么意思? - Warren P
    似乎只是为了表明他所做的更改。 - 362mike362

    0

    考虑到vs2010已经发布,您可以考虑升级并查看问题是否解决。


    我想升级到VS 2010 RTM,但我们正在进行中的一个项目中,希望等到开发完成后再升级。如果这是RC中的一个错误,我们可能需要更早地升级,但首先我想确认我正在使用正确的参数。 - Chad Peck

    0

    对于团队构建正在运行的构建,您指定了哪个文件?如果是解决方案文件,则仅将这些属性传递到它并不意味着在构建每个项目文件时它们会被传播。当您构建解决方案文件时,只有一组有限的属性会传递给正在构建的项目。如果是这种情况,您应该创建一个.proj文件,它将基本上替换您的解决方案文件并传递这些属性。

    我最近发表了一篇关于如何使用MSBuild文件替换解决方案文件的博客文章。

    如果这不适用于您或无法帮助您,请告诉我。

    另外,您可能还对MSDeploy的其他线程感兴趣,但这与您在此处遇到的问题不同。 如何让TFS2010通过MSBUILD为我运行MSDEPLOY?


    我正在使用一个解决方案文件,但那似乎不是问题所在。只需将 MSDeployPublishMethod 更改为 RemoteAgent 即可解决问题。 - Chad Peck
    好的,很高兴听到你解决了那个问题。 - Sayed Ibrahim Hashimi

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