我正在使用Web Deploy将Web应用程序部署到我的主机。使用“发布”命令从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使用Publish时,它适用于Release但不适用于Test。所以我现在试图找出导致成功或部署失败的两种配置之间的不同之处。
答案 0 :(得分:5)
我设法让它发挥作用。根据我的网站主机,Web部署存在一些问题,他们正在使用微软的Web部署&amp; IIS团队,他们不得不在服务器上应用一些临时修复程序。很奇怪,因为几个月前它们都曾经工作过。
我最终恢复了项目文件中的<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
设置,以防止Web部署触及ACL。我的网站主持人表示,它正在删除应用程序池标识的权限,并阻止Web控制面板访问网站文件夹。
他们还告诉我将<_MSDeployVersionsToTry Condition="'$(_MSDeployVersionsToTry)'==''">7.1;8.0;9.0</_MSDeployVersionsToTry>
添加到项目文件中。我添加了它,虽然我不确定它是否有所作为。