我假设您已按照本文为 WebDeploy 2.0 正确配置了服务器:
配置 Web 部署 (IIS.NET)
注意: MS 已经发布了 Web Deploy 2.0 的更新,原来的链接不再有效。我已经更新了这个,但我认为随着时间的推移它会成为一个移动的目标。
您还需要在您的开发/构建/CI 机器上安装 Web Deploy 2.0。
如果您仍在使用 1.0,那么我建议升级,2.0 中有一些巨大的改进。
使用 Visual Studio 2010 的发布功能:
Visual Studio 可以通过右键单击站点并选择“发布”来发布站点。这带来了以下对话:
Visual Studio 2010 和 WebDeploy 2.0 有几个问题。首先是 VS2010 不支持 WebDeploy/MSDeploy 2.0。因此,如果您尝试发布,您将收到如下错误:
错误 1 Web 部署任务失败。((04/02/2011 12:30:40)在远程计算机上处理请求时出错。)
C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
假设您已打开此功能,您还将在服务器上 Web 管理服务的 Failed Request Tracing 中看到以下错误:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData 跟踪部署代理异常。请求 ID ''。请求时间戳:'02/04/2011
System.UnauthorizedAccessException:对路径'D:\'的访问被拒绝。
驱动器号会根据您的 IIS 站点所在的驱动器而有所不同。
开箱即用,GUI 内发布机制默认使用错误版本的 MSDeploy (1.0)。我们想告诉 VS2010 使用 MSDeploy 2.0。您可以通过编辑devenv.exe.config
位于以下位置的 Visual Studio 2010 文件来执行此操作(假设您安装了默认c:\
驱动器):
对于 64 位系统:c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
对于 32 位系统:c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
在您最喜欢的 XML 编辑器中打开devenv.exe.config
(我只是使用 Visual Studio 2010 本身)并复制以下 xml:
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
将此添加到该/configuration/runtime/assemblyBinding
部分:
完成此操作后,关闭 Visual Studio 2010 的所有实例以使此更改生效。重新启动 VS2010,打开一个 web 项目,然后再次尝试发布。这次应该成功了。
使用构建包发布:
Visual Studio 可以生成可以从命令行执行的构建包。这是使用生成的Project -> Build Deployment Package
。方便持续集成等(也可以使用带有/t:Package
开关的 msbuild 生成包)。
包的输出文件夹通常默认为obj\Package
.
不幸的是,Visual Studio 2010 有点错误,并生成了一个针对 1.0 的 msdeploy 包装批处理脚本,并针对服务器而不是站点级别的部署。
除了制作您自己的 msdeploy.exe 命令行外,没有快速解决方法。我将其拆分为几行以使其更具可读性。:
“C:\Program Files\IIS\Microsoft Web 部署 v2\\msdeploy.exe”
-source:archiveDir='d:\sites\DemoApp\obj\Package\Archive'
-目的地:
汽车,
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
用户名='demosite',
密码='一些密码',
authtype='基本',
includeAcls='假'
-动词:同步
-disableLink:AppPoolExtension
-disableLink:内容扩展
-disableLink:CertificateExtension
-setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml"
-allowuntrusted
首先要注意的是路径msdeploy.exe
。Visual Studio 生成 1.0 版的路径。我已将其更改为使用 2.0。
显着参数:
-source:archiveDir=
告诉 msdeploy 我们正在部署一个包并提供本地位置
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- 这告诉 MSDEPLOY 部署到 IIS7 上的特定站点。yoursitename
应该与 IIS 中的站点名称完全匹配。
userName
并且password
are 是站点的委派经理用户的名称。这是使用站点级别的“IIS 管理器权限”功能配置的。该帐户需要是本地 Windows 用户帐户。
-authtype='basic'
- 这会强制进行基本身份验证,否则会尝试 NTLM 身份验证。
-allowuntrusted
- 如果您使用内置的自签名 SSL 证书,这将忽略任何 SSL 证书错误。
如果您使用该命令行,那么您应该能够成功部署到远程 IIS7 服务器。
发布原始内容:
有时我们只想直接从本地文件夹发布一些静态内容(或者甚至是经典的 ASP 或 PHP 站点)。我们可以使用以下msdeploy.exe
命令行来执行此操作:
“C:\Program Files\IIS\Microsoft Web 部署 v2\\msdeploy.exe”
-source:contentPath='d:\websites\mysite'
-目的地:
contentPath='你的网站名称',
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
用户名='demosite',
密码='一些密码',
authtype='基本',
includeAcls='假'
-动词:同步
-allowuntrusted
同样的规则也适用于-dest:contentPath
和computerName
。
我相信 MSDeploy 版本问题将在 SP1 中得到解决(我还没有机会查看)。
一个最终的 VS2010 陷阱:
使用 Visual Studio 2010 发布时,“发布”构建包会导致站点匿名帐户的 ACL 对所有文件和文件App_Data
夹更改为只读,但更改为读取和写入的文件夹除外。
这可以通过将以下设置添加到.csproj
每个下的文件来解决<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
或者,如果您使用的是 msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
我从这里找到了有用的金块:
跳过在 Visual Studio 2010 部署包中设置 ACL(WayBackMachine 链接,因为原始内容不再可用)