編譯源代碼並完成測試以後,開發過程其實並沒有結束。在這個極端,需要把應用程序提供給用戶。無論是ASP.NET應用程序,客戶端應用程序還是 Compact Framework構建的應用程序,開發出來的軟件都必須部署到目標環境中。.NET Framework的部署工作比以前容易得多了,因為不再需要注冊COM組件也不需要編寫新的注冊表配置但願。
記得以前安裝程序的時候,經常需要安裝注冊表項什麼的,.NET完全不需要操作注冊表。
部署過程中,最大的問題就是第三庫的依賴問題的解決。開發人員的計算機上可能提前安裝了用於開發的第三方的類庫,比如我們做圖形處理的經常需要用到 opencv類庫或者emgucv類庫,但是目標計算機上一般不會安裝這些第三方類庫。這樣在部署的時候就需要在目標計算機上安裝相應的類庫。部署過程對 於大型應用程序可能非常復雜,就像我們玩的使命召喚的部署,或者Visual Studio的部署,在部署的過程中還可以選擇哪些組件可以安裝,哪些組件不可以安裝等操作。
本文主要是簡要的介紹一下部署的基本方法,起到一個拋磚引玉的作用,要是想寫出非常強大的部署功能,還需要學習更多的文檔和資料。
XCopy允許把一個程序集或者一組程序集復制到目標計算機應用程序文件夾中,從而減少開發時間。.NET程序集是自我包含的(元數據描述了包含在程序集中的內容),因為不需要在注冊表中進行注冊。
每個程序集都跟蹤他需要執行的其他程序集,因此,在默認情況下,程序集會在當前應用程序文件夾中查找依賴項。這就是為什麼當我們的程序引用了第三方的程序集的時候,把第三方程序集放在應用程序文件夾下就可以正確的運行,及時將應用程序移動到其他的計算機上。
在發布Web站點之前,會編譯整個站點,然後復制到指定的位置。編譯後的站點,不包含任何源代碼。
部署項目就是我們經常用的安裝程序的方式。VS2010可以為應用程序創建安裝程序。基於Windows Installer技術有四種選擇:
創建合並模塊
為客戶端應用程序創建安裝程序
為Web應用程序創建安裝程序
為基於智能設備的應用程序創建安裝程序
創建cab文件,用過windows moblie操作系統的都知道,那個系統中的安裝程序都是cab文件,還有就是在win ce系統中也是使用cab安裝文件。
ClickOnce技術可以構建自動升級的,基於Windows的應用程序。
ClickOnce允許把應用程序發布到Web站點,文件共享,或者CD上。對應用程序進行升級或者更新版本以後,開發小組可以把他們發布到相同的位置或者站點上,最後用戶在使用應用程序的時候,應用程序會自動檢查是否有最新版本,如果有就進行更新。
接下來詳細介紹每種部署方式。
XCopy部署就是把一組文件復制到目標計算機上的一個文件夾中,然後在客戶端執行應用程序。無論程序集的數目是多少,如果把文件復制到同一個文件夾中,應用程序就可以執行。不需要配置設置或注冊表。
簡單的說,XCopy部署就是把程序集復制到目標計算機上,就可以部署功能完善的應用程序。使用這種方法對可以部署的程序集的大小咩有限制。
XCopy部署的缺點:不能把程序集放到全局程序集緩存(GAC)中,不能在開始菜單中添加圖標,如果程序依賴某種類型的COM庫,就不能很容易的注冊COM組件。
XCopy也可以用於Web應用程序的發布。建立虛擬目錄,把Web應用程序文件復制到虛擬目錄即可。
Web項目的另一個部署選項是發布Web站點,發布Web站點就是預編譯整個站點,並將編譯好的版本放在指定的位置,VS中有發布Web站點的用戶向導,根據向導提示就可以進行操作了。
發布Web站點的優點是速度快,安全性高。速度快是因為所有的程序集都已經編譯過了。
XCopy使用起來非常簡單,但是缺乏一些功能。Visual Studio 2010提供了6個安裝程序項目類型。有4個是基於 Windows Installer技術。
如圖所示的安裝項目類型。
Setup Project會部署項目到文件夾結構中,而Web Setup Project會部署項目到Web服務器的虛擬目錄中。
在創建包含在多個部署項目中的組件或者功能庫時,一般使用Merge Module Project,通過創建合並模塊,可以設置專用於組件的配置項,而無需在主項目的創建過程中擔心他們。
Windows Installer是一個服務,負責管理在大多數的 windows操作系統上安裝、更新、修復和刪除應用程序。
Windows Installer在數據庫中跟蹤應用程序的安裝,在卸載應用程序的時候,Windows Installer和內容以跟蹤和刪除已經添加的注冊表設置和復制到硬盤上的文件,以及已經添加的桌面圖標和開始菜單中的圖標。如果注冊表設置或與應用程 序相關的DLL被不小心刪除了,就可以修復安裝。在修復的過程中,安裝程序會從上一次安裝中讀取數據庫,並重制該安裝過程。
如果需要更多的更空,就應該查看Windows Installer SDK, 他是Platform SDK的一部分,其中包含了為應用程序創建自動以安裝軟件包的文檔。
創建安裝包的第一個任務是:標識應用程序需要的所有外部資源,寶庫配置文件,COM組件,第三方類庫,控件和圖像資源等。
這裡首先介紹如何在獨立的解決方案中創建安裝程序項目。然後介紹在原來的解決方案中創建安裝程序項目。
我們這裡使用的例子,都是一個基於Adaboost人臉檢測的程序,這個程序使用了Emgucv的第三方類庫。
在開始創建部署項目之前,要確保部署的應用程序有一個發布版本,即Release版本。
新建Setup Project 項目,填寫相關信息,如圖:
然後可以看到這樣的界面:
在“‘Solution Explorer”中右擊項目選擇Add,選擇Assembly.如圖
添加本項目需要的程序集。選擇了已經Release好了的FaceDetectTest.exe, 然後可以看到,在Detected Dependencies部分,Vs給出了這個可執行文件需要的程序集依賴。這樣Vs會自動的包含程序集。依賴程序集如圖:
接著需要確定把程序集部署到用戶計算機什麼地方。
單擊左側列表的樹根,然後在空白地方右擊鼠標,可以選擇添加特殊的文件夾,可以根據自己的需要添加相應的特殊文件夾。這裡我們添加了GAC文件夾。但是添加到GAC文件夾中的程序集必須有強命。添加GAC以後,把GAC需要放置的程序集拖進去。
接下來,用戶可以再桌面或者開始菜單添加快捷方式。就需要把快捷方式拖放到相應的文件夾。
要創建桌面快捷方式,進入Application文件夾,右擊Application文件夾中的需要創建快捷方式的程序,如圖
選擇“Create Shortcut to FaceDetectTest.ext”, 然後會生成一個這個應用程序的快捷方式。如圖
然後將這個快捷方式文件拖放到User's Desktop文件夾中,這樣,在安裝程序的時候,就會在用戶的桌面顯示一個程序的快捷方式。
然後Build整個項目就可以獲得安裝文件了。
上面的部署方式有幾個缺點:例如,當心的程序集添加到原始應用程序匯總,部署項目不會自動的識別任何改動的地方,而必須手動的添加新的程序集,然後 再次鹽城心的依賴項,包含依賴項。如果在包含幾十個或者上百個應用程序集的應用程序中,這樣就很難維護了。VS提供了一個簡單的解決方案,吧部署項目包含 在應用程序的解決方案中,這樣就可以把主項目的輸出作為部署程序集了。
在原來的解決方案中,添加一個新的Project, 選擇Setup Project。如圖
上面的安裝程序通過Add->Assemblies添加程序集,這次我們通過Add->Project Output添加程序集。如圖
在彈出的窗口中,選擇要添加部署的項目,然後選擇"Primary Output",如圖
這包括構建應用程序時的輸出和所有依賴項。選擇Configuration 為Release x86
系統仍然會自動檢測到依賴項和主輸出:
剩下的操作和上面的創建安裝項目的操作一樣。
就可以獲得安裝程序文件。
這種方法的優點:當把新的項目添加到解決方案中,在原來的工程中添加一個新的引用,部署項目會自動的選擇新的程序集,無需我們做任何工作。
ClickOnce是一種允許應用程序自動升級的部署技術。應用程序發布到共享文件、Web站點或其他媒介,如果後來程序發布者對程序進行了升級,ClickOnce會自動檢測程序版本進行升級,無需用戶干涉。
ClickOnce還解決了安全權限問題,一般情況下,要安裝應用程序,用戶需要由管理權限。而利用ClickOnce,用戶只要有運行應用程序所需的最低絕對權限,就可以安裝和運行應用程序。
發布ClickOnce應用程序的方法:
右擊需要創建ClickOnce安裝方法的項目,選擇屬性,看到如下界面
選擇Publish,
ClickOnce應用程序的發布,需要和IIS服務器配合操作。
這裡我把ClickOnce應用程序放到了本地IIS服務器上
然後點擊Publish.
然後就可以通過浏覽器訪問地址進行應用程序安裝了。