8

我正在使用 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。

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

<?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 使用 Publish 时,它适用于 Release,但无法用于 Test。所以我现在试图找出导致部署成功或失败的两种配置之间的不同之处。

4

1 回答 1

5

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

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

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

于 2011-06-25T18:19:33.877 回答