【问题标题】:Problem deploying with Web Deploy and ACLs使用 Web 部署和 ACL 部署问题
【发布时间】:2011-06-25 10:26:51
【问题描述】:

我正在使用 Web Deploy 将 Web 应用程序部署到我的主机。当使用 Publish 命令从 Visual Studio 运行时,它工作正常。当我尝试使用 MSBuild 中的 Web 部署进行部署时,网站变得无法访问,甚至我的 Web 主机的 Web 控制面板也无法再访问该网站。我已经追踪到我认为是网站文件夹的权限。

从 Visual Studio 发布会更新 ACL,网站正常运行,并且 Web 主机的控制面板正常工作(即使之前从 MSBuild 的部署破坏了它)。

以下是从 Visual Studio 运行时的输出:

------ Publish started: Project: mywebapp, Configuration: Release Any CPU ------
Transformed Web.config using Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
Auto ConnectionString Transformed Views\Web.config into obj\Release\CSAutoParameterize\transformed\Views\Web.config.
Auto ConnectionString Transformed obj\Release\TransformWebConfig\transformed\Web.config into obj\Release\CSAutoParameterize\transformed\Web.config.
Copying all files to temporary location below for package/publish:
obj\Release\Package\PackageTmp.
Start Web Deploy Publish the Application/package to https://myhost.net:8172/MsDeploy.axd?site=mywebapp.com ...
Updating setAcl (mywebapp.com).
Updating setAcl (mywebapp.com).
Updating filePath (mywebapp.com\bin\mywebapp.Core.dll).
Updating filePath (mywebapp.com\bin\mywebapp.Core.pdb).
Updating filePath (mywebapp.com\bin\mywebapp.dll).
Updating filePath (mywebapp.com\bin\mywebapp.pdb).
Updating filePath (mywebapp.com\Views\Web.config).
Updating filePath (mywebapp.com\web.config).
Updating setAcl (mywebapp.com).
Updating setAcl (mywebapp.com).
Publish is successfully deployed.
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

我发现了一个我认为 Visual Studio 在部署期间使用的文件,其中包含 ACL 信息。它名为 myapp.SourceManifest.xml,位于 C:\Projects\mywebapp\obj\Release\Package 文件夹中。

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <contentPath path="C:\Projects\mywebapp\obj\Release\Package\PackageTmp" />
  <setAcl path="C:\Projects\mywebapp\obj\Release\Package\PackageTmp" setAclResourceType="Directory" />
  <setAcl path="C:\Projects\mywebapp\obj\Release\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
</sitemanifest>

我的 MSBuild 文件包含执行部署的以下内容:

<Exec Command='"$(ProgramFiles)\IIS\Microsoft Web Deploy v2\msdeploy.exe" -verb:sync -source:package="mywebapp\obj\test\package\mywebapp.zip" -dest:auto,computername="https://myhost.net:8172/MsDeploy.axd?site=mywebapp.com",username=XXXX,password=XXXX,authtype=basic -allowuntrusted:true -setparam:name="IIS Web Application Name",value="mywebapp.com"' />

当我运行 MSBuild 进行部署时,我可以看到文件正在更新,但 ACL 没有更新。

由于配置不同(测试而不是发布),我的 MSBuild 部署来自不同的文件夹,并且 mywebapp.SourceManifest.xml 文件也不同。

<?xml version="1.0" encoding="utf-8"?>
<sitemanifest>
  <IisApp path="C:\Projects\mywebapp\obj\Test\Package\PackageTmp" managedRuntimeVersion="v4.0" />
</sitemanifest>

不同的 mywebapp.SourceManifest.xml 文件可能与它有关?我需要做什么才能更新 ACL?


更新

我发现 mywebapp.SourceManifest.xml 文件中的差异是由我的测试配置的 .csproj 文件中存在以下内容引起的。

<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>

我已将其更改为 True,现在清单文件在测试和发布配置之间是相同的。

我还发现,当使用 Visual Studio 发布时,它适用于发布,但无法用于测试。因此,我现在试图找出导致部署成功或失败的两种配置之间的不同之处。

【问题讨论】:

    标签: acl msdeploy webdeploy


    【解决方案1】:

    我设法让它工作。根据我的虚拟主机的说法,Web 部署存在一些问题,他们正在与 Microsoft 的 Web 部署和 IIS 团队合作,他们必须在服务器上应用一些临时修复。很奇怪,因为这在几个月前还可以正常工作。

    我最终在我的项目文件中恢复了 &lt;IncludeSetAclProviderOnDestination&gt;False&lt;/IncludeSetAclProviderOnDestination&gt; 设置,以防止 Web Deploy 触及 ACL。我的网络主机说它正在删除应用程序池身份的权限并阻止网络控制面板访问网站文件夹。

    他们还告诉我将&lt;_MSDeployVersionsToTry Condition="'$(_MSDeployVersionsToTry)'==''"&gt;7.1;8.0;9.0&lt;/_MSDeployVersionsToTry&gt; 添加到项目文件中。我添加了它,虽然我不确定它是否有所作为。

    【讨论】:

    • 谁是您的虚拟主机?我想联系他们以了解他们在 Web Deploy 上收到了哪些类型的反馈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2012-06-25
    • 2014-07-10
    相关资源
    最近更新 更多