我已经在(测试)服务器上安装并配置了 WebDeploy 2.0,以便 WebMatrix 和 Visual Studio 2010 用户可以使用它将他们的应用程序上传到我们的 Windows 2008R2 环境。
这与 WebMatrix 配合得很好,但是我在从 Visual Studio 2010 部署应用程序时遇到了问题。如果我单击发布并使用 WebDeploy 方法,Visual Studio 会报告错误并且不会发布任何内容:
因此我打开了 Web 管理服务的失败请求跟踪,然后我看到了以下内容:
53 AspNetModuleDiagErrorEvent Uri /MsDeploy.axd eventData 跟踪部署代理异常。请求 ID ''。请求时间戳:'01/22/2011 00:18:54'。错误详细信息:System.UnauthorizedAccessException:拒绝访问路径 'd:\'。
位于 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 位于 System.IO.DriveInfo.get_DriveFormat()
为了方便使用 WebDeploy 功能,授权管理用户被授予对站点 Web 文件夹的完全控制权。本文将介绍这一点:
没有提到其他权限。考虑到错误的性质,我尝试授予站点的委托管理用户Read Attribute
权限D:\
并将其限制为This Folder Only
,然后 Visual Studio 2010 便能够立即使用 WebDeploy 发布应用程序。
为什么 Visual Studio 包的行为与服务器上的 WebMatrix 不同?
答案1
这是 Visual Studio 2010 的一个错误,它默认使用错误的程序Microsoft.Web.Deployment
集(7.1.0.0
)。
为了解决这个问题,需要对 VS 2010 的配置文件进行编辑,以强制它使用8.0.0.0
:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35"
culture="neutral"/>
<bindingRedirect
oldVersion="7.1.0.0"
newVersion="8.0.0.0"/>
</dependentAssembly>
上面的 xml 片段应该添加到:
/configuration/runTime/assemblyBinding
微软的 PSS 小组已确认了这一点。Visual Studio 2010 SP1 显然将解决这个问题。
显然,您需要在部署计算机上安装 MS WebDeploy 2.0。这可以通过 Web 平台安装程序获得,也可以通过安装 Web Matrix 1.0 RTM 获得,顺便说一下,这样做是正确的。