我假設你已經正確配置您的服務器WebDeploy 2.0按這篇文章:
Configure Web Deploy (IIS.NET)
注: MS已經發布的Web 2.0部署的刷新和原文鏈接ISN」不再有效。我已經更新了這個,但我認爲隨着時間的推移它會成爲一個移動的目標。
您還需要在開發/構建/ 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。所以,如果你嘗試發佈,你會得到一個錯誤,如下列:
Error 1 Web deployment task failed.((04/02/2011 12:30:40) An error occurred when the request was processed on the remote computer.)
您還將看到失敗請求下面的錯誤跟蹤在服務器上的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: Access to the path 'D:\' is denied.
的驅動器盤符會有所不同艾科rding你的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
打開了devenv.exe.config
在你喜歡的XML編輯器(我只用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
生成的。方便持續集成等(包也可以使用msbuild與/t:Package
開關生成)。
包的輸出文件夾通常默認爲obj\Package
。
不幸的是,Visual Studio 2010得到這個有點錯誤,並生成一個msdeploy包裝批處理腳本,目標爲1.0,並定位在服務器而不是站點級別的部署。
除了製作自己的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
are是該網站的委託管理員用戶的名稱。這是使用站點級別的「IIS管理器權限」功能配置的。該帳戶需要是本地Windows用戶帳戶。
-authtype='basic'
- 這強制基本認證,否則嘗試NTLM認證。
-allowuntrusted
- 如果您使用內置的自簽名SSL證書,則會忽略任何SSL證書錯誤。
如果您使用該命令行,那麼您應該能夠成功部署到遠程IIS7服務器。
出版原始內容:
有時候,我們只想從本地文件夾中發佈一些靜態內容(或者甚至是一個傳統的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中解決(我還沒有機會看看)。
研究最後VS2010疑難雜症:
當使用Visual Studio 2010的發佈,則「發佈」建立包導致該網站的匿名帳戶的ACL的改變爲只讀的所有文件和文件夾的除外App_Data
文件夾更改爲讀取和寫入。
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
或者,如果你使用的MSBuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
我發現有用的金塊從
這可以通過左右下的每個<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
添加以下設置到.csproj
文件來解決這裏:
Skipping setting an ACL in a Visual Studio 2010 deployment package (WayBackMachine link because the original content is no longer available)
這是一個偉大的帖子凱夫 - 真正有用的信息在這裏。但是,對於我的問題,除非使用計算機管理員帳戶,否則我仍然會看到401驗證碼錯誤(在我自己的答案中進行了解釋)。 – 2011-06-02 07:33:53
msdeploy.axd?site = yoursitename是爲我修復的。如果我離開了站點參數,我得到了401.謝謝 – Schneider 2011-07-20 08:03:59
謝謝你這個可怕的答案。 ?site = ...是我剛剛度過了3個小時的生活! :) – Ragesh 2011-07-28 18:29:46