我假设您已经按照以下文章正确配置了WebDeploy 2.0服务器:
配置Web Deploy(IIS.NET)
注意:微软已经发布了Web Deploy 2.0的更新,原始链接已经不再有效。我已经进行了更新,但我认为它将随着时间而变化。
您还需要在开发/构建/CI机器上安装Web Deploy 2.0。
如果您仍在使用1.0,则建议升级,因为2.0有一些巨大的改进。
使用Visual Studio 2010的发布功能:
Visual Studio可以通过右键单击站点并选择“发布”来发布站点。这会弹出以下对话框:
![enter image description here](https://istack.dev59.com/aaODI.webp)
使用Visual Studio 2010和WebDeploy 2.0时需要注意几个问题。首先是VS2010不支持WebDeploy/MSDeploy 2.0。因此,如果您尝试发布,您会收到以下错误:
Error 1 Web deployment task failed.((04/02/2011 12:30:40) An error occurred when the request was processed on the remote computer.)
![enter image description here](https://istack.dev59.com/i8pxy.webp)
如果您已经开启了服务器上Web管理服务的故障请求跟踪,那么您还会在C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
中看到以下错误:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData Tracing
deployment agent exception. Request ID
''. Request Timestamp: '02/04/2011
System.UnauthorizedAccessException: 访问路径'D:\'被拒绝。
![enter image description here](https://istack.dev59.com/Q7l2A.webp)
驱动器号将根据你的IIS站点所在的驱动器而有所不同。
默认情况下,GUI发布机制使用错误版本的MSDeploy(1.0)。我们想要告诉VS2010使用MSDeploy 2.0。您可以通过编辑Visual Studio 2010的devenv.exe.config
文件来实现这一点,该文件位于(假设您进行了默认的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编辑器(我只是使用了Visual Studio 2010本身)打开devenv.exe.config
并复制以下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
部分:
![enter image description here](https://istack.dev59.com/rHAIi.webp)
完成后,请关闭所有Visual Studio 2010的实例,以使更改生效。重新启动VS2010,打开Web项目,然后再尝试发布。这次应该会成功。
使用Build Package进行发布:
Visual Studio可以生成一个Build Package,可以从命令行执行。这是使用Project->Build Deployment Package
生成的。非常适合持续集成等情况(该包也可以使用带有/t:Package
开关的msbuild生成)。
包的输出文件夹通常默认为obj\Package
。
不幸的是,Visual Studio 2010做错了一点,并生成了一个面向1.0版本的msdeploy包装批处理脚本,将部署目标定位到服务器而不是站点级别。
除了自己编写msdeploy.exe命令行之外,没有快速解决此问题的方法。我已将此拆分为多行,以使其更易读。
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:archiveDir='d:\sites\DemoApp\obj\Package\Archive'
-dest:
auto,
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='demosite',
password='somepassword',
authtype='basic',
includeAcls='False'
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-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
是网站委派管理器用户的名称。这可以使用站点级别的"IIS管理器权限"功能进行配置。该帐户需要是本地Windows用户帐户。
-authtype='basic'
- 这强制执行基本身份验证,否则会尝试使用NTLM身份验证。
-allowuntrusted
- 如果使用内置自签名SSL证书,则忽略任何SSL证书错误。
如果使用该命令行,则应能够成功部署到远程IIS7服务器。
发布原始内容:
有时我们只想直接从本地文件夹发布一些静态内容(或甚至是Classic ASP或PHP站点)。我们可以使用以下
msdeploy.exe
命令行来实现:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:contentPath='d:\websites\mysite'
-dest:
contentPath='yoursitename',
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='demosite',
password='somepassword',
authtype='basic',
includeAcls='False'
-verb:sync
-allowuntrusted
再次强调-dest:contentPath
和computerName
的规则。
我相信MSDeploy版本问题将在SP1中得到解决(我还没有机会查看)。
Visual Studio 2010的最后一点注意事项:
使用Visual Studio 2010发布时,“发布”构建包会导致站点匿名帐户的ACL更改为所有文件和文件夹的只读,但App_Data
文件夹除外,它被更改为读和写。
可以通过在每个<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
下添加以下设置来解决此问题:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
或者如果你正在使用msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
我从这里找到了有用的信息:
在Visual Studio 2010部署包中跳过设置ACL(使用WayBackMachine链接,因为原始内容已不再可用)