提綱:
一、概述
二、ASP.NET Web應用的結構
三、ASP.NET支援的部署機制
四、用XCOPY命令部署
五、用VS.NET的“複製項目”功能部署
六、用Web安裝項目部署
6.1 Windows安裝程式
6.2 VS.NET Web安裝項目的特點
七、建立Web安裝項目
八、安裝ASP.NET Web應用程式
九、結束語
本文:
一、概述
在深入到配置和部署ASP.NET Web應用程式的具體步驟之前,理解配置(Setup)和部署(Deployment)之間的區別是十分必要的。配置是指將應用程式套件裝成易於部署的形式,封裝好之後的應用程式可以方便地安裝到目標伺服器上。部署是一個獲得應用程式並將它安裝到另一台機器上過程,一般通過安裝程式完成。
許多使用者都曾經遇到過Windows軟體安裝技術的脆弱點——當我們安裝某個軟體的新版本時,安裝程式將新版的dll檔案複製到系統目錄,同時執行所有必要的註冊表修改操作,但是,安裝操作可能影響其他運行在同一機器上的軟體,尤其是原有的軟體和新安裝的軟體共用某一組件時,出現問題的可能性更大。如果新安裝的組件與它的早期版本向後相容,當然沒有問題,但許多情況下,完全保持向後相容難以做到,所以經常會遇到安裝了一個新軟體之後損壞原有軟體的情形,這就是臭名昭著的DLL Hell問題。
Visual Studio.NET(VS.NET)的設計目標之一就是解決安裝Windows軟體時經常遇到的問題。VS.NET應用的許多功能都依賴.NET架構類庫實現,.NET架構類庫建立了一個全新的編程模型,從而為極大地簡化安裝過程創造了條件。另外,VS.NET應用程式編譯成程式集(Assembly),程式集是由一個或多個支援程式集啟動並執行檔案構成的部署單元。微軟.NET架構引入了許多簡化應用程式部署、解決DLL Hell問題的新特性,例如,配置資訊可以儲存在web.config設定檔,web.config設定檔是一個XML格式的文字檔,可以利用XCOPY之類的命令直接複製和部署到目標伺服器。
在探討各種部署機制之前,我們首先來瞭解一下ASP.NET應用的結構,因為正是這個結構才使得應用能夠方便地部署到目標伺服器上。
二、ASP.NET Web應用的結構
ASP.NET應用程式由各種Web頁面(.aspx和HTML檔案)、處理常式、模組、執行代碼和其他檔案(例形檔案,設定檔等)構成,這些檔案都可以從Web伺服器的虛擬目錄引用。如果使用了.aspx檔案的CodeBehind機制,ASP.NET應用程式還包含編譯好的程式集,另外還有其他支援應用程式的程式集,例如,可以把應用的商務邏輯封裝成一個單獨的程式集。程式集一般位於應用程式虛擬目錄的bin子目錄下。要理解VS.NET如何簡化部署過程,必須理解程式集的結構,因為正是程式集的結構特點才使得簡化部署成為可能。程式集包含四種元素:
⑴ MSIL代碼,即微軟中繼語言代碼:編譯應用程式代碼時,原始碼被編譯成所謂的MSIL代碼。MSIL代碼是.NET通用語言執行平台環境(CLR)所理解的代碼。
⑵ 中繼資料:描述代碼中定義的類型、方法和其他元素。
⑶ Manifest:包含名稱和版本資訊,程式集中包含檔案的清單,安全資訊,等等。
⑷ 支援檔案和資源。
從這個結構可以看出,程式集包含了完整的自我描述資訊,所以VS.NET應用程式根本不必象COM組件那樣在註冊表中註冊。這就是說,只要目標機器上也安裝了.NET架構,安裝VS.NET應用程式時只要簡單地將必需的檔案複製到目標機器就可以了,這就是所謂的XCOPY部署。不過,除了XCOPY之外,還可以使用VS.NET提供的“Web安裝項目”實現自動部署。在接下來的內容中,我們將看到如何利用各種不同的部署機制部署一個Web應用。
三、ASP.NET支援的部署機制
ASP.NET Web應用程式支援下列三種部署方案:
⑴ XCOPY部署
⑵ 利用VS.NET的“複製項目”功能部署
⑶ 使用VS.NET的“Web安裝項目”部署
在接下來的內容中,我們將深入瞭解所有這三種部署機制。為便於說明,我們先要建立一個Visual C# ASP.NET Web應用程式,應用的名稱為DeploymentExampleWebApp,一所示。
圖一
我們將以這個項目為例,闡述部署Web應用的各種方法。
四、用XCOPY命令部署
.NET架構的主要目標之一就是簡化部署,例如支援XCOPY部署。在瞭解.NET如何支援XCOPY部署之前,我們先來看看XCOPY部署到底是怎麼回事。在.NET之前,安裝一個組件(例如一個COM組件)意味著不僅要把組件複製到適當的目錄,而且還要執行註冊表修改之類的操作。但現在有了.NET,安裝一個組件的全部操作就是將程式集複製到客戶應用程式的bin目錄,由於程式集包含完整的自我描述資訊,應用程式可以立即開始使用程式集。這一切之所以成為可能,是因為編譯器將標識符和中繼資料資訊嵌入到了編譯好的模組之中,而CLR利用這些資訊來裝入程式集的適當版本。標識符包含了裝入和運行模組、尋找程式集引用的其他模組所需的所有資訊。這種安裝也稱為無幹擾(Zero-Impact)安裝,因為系統不會因為修改註冊表、配置組件而受到影響;另外,無幹擾安裝也使得組件卸載操作不會對系統產生任何意外的影響,卸載組件時只要從特定的目錄刪除某些檔案就可以了。
執行XCOPY部署時,唯一要做的就是開啟一個命令視窗,用XCOPY命令將必要的檔案複製到伺服器的特定目錄。圖二顯示了如何用XCOPY部署將名為DeploymentExampleWebApp的Web應用部署到目標伺服器RemoteServer。
圖二
可以看到,XCOPY命令有許多選項:
⑴ /E:表示將源位置的目錄、子目錄和檔案都複製到目標位置,包括空目錄。
⑵ /K:保留所有現有的檔案和檔案夾的屬性。預設情況下,XCOPY命令複製檔案或目錄結構時會忽略檔案的屬性,例如,如果檔案原來有唯讀屬性,複製到目標位置後唯讀屬性丟失。要保留原來的檔案屬性,必須加上/K選項。
⑶ /R:覆蓋帶有唯讀屬性的檔案。
⑷ /O:保留檔案或檔案夾的所有與安全有關的ACL使用權限設定。
⑸ /H:隱藏檔案和系統檔案也要複製。
⑹ /I:要求XCOPY將目標位置視為一個目錄,如指定的目錄不存在,則建立它。
把檔案夾複製到目標伺服器之後,接下來在目標伺服器上用IIS管理器建立一個虛擬目錄,把虛擬目錄映射到XCOPY建立的物理目錄——這就是用XCOPY將一個ASP.NET Web應用部署到遠程伺服器所要做的全部操作。