在Visual Studio 2003下開發網站的都知道ASP.NET 1.1網站生成后都是一個唯一命名的程序集(項目名稱.DLL),但是這種情況在Visual Studio 2005的網站開發中不見了。Visual Studio 2005給我們提供了“發布網站”這樣方便的功能,不用在像以前一樣COPY的部署,但是采用其“發布網站”的功能,會在站點的BIN目錄中產生App_Code.compiled,App_Code.dll,App_Web_xxxxxx.dll,項目名稱.dll等等這樣的程序集,如果不采用預編譯的方式那么產生的文件會更加的多,因為很多都是隨機命名也沒有什么規律可言;這樣會給那些想COPY更新的人帶來不便,因為原來的文件不能被覆蓋,需要先刪除再COPY;有很多時候可能就是更新了后臺代碼,直接生成項目或是WEB的程序集,像以前一樣直接覆蓋DLL的方式也很簡單。
也許很多人不會考慮BIN下存放的東西,只要站點能運行就好了,那么這樣的人讀到這里也就沒有必要再看此文章,要知道時間是寶貴的,浪費在自己不關心的事情上很不值得的。
上面羅嗦了一堆,下面筆者將介紹采用Microsoft Web Deployment Projects在Visual Studio 2005中生成唯一程序集的方法。
關于Microsoft Web Deployment Projects工具可以從微軟站點獲得詳盡的資料,我也沒什么好說的了微軟寫的很清楚了,呵呵。java根據模板生成html,
下載地址:
http://msdn.microsoft.com/asp.net/reference/infrastructure/wdp/default.aspx
詳細使用:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/web_deployment_projects.asp
<?XML:NAMESPACE PREFIX = O />
?
安裝后在“生成”和WEB項目的上下文菜單看到“Add Web Deployment Project…”,好了添加一個Web Deployment Project項目,起一個名稱,這個名稱就是將來編譯后生成的程序集名稱,默認的名稱“當前項目名稱_deploy”
<?XML:NAMESPACE PREFIX = V />
雙擊Web Deployment Project的項目出現屬性頁面
Compilation中的Output Folder設置項目輸出路徑
Output Assemblies中的四大選項:
n??????? Merge all outputs to a single assembly-所有輸出都編譯成一個程序集(參數:程序集名稱)
n??????? Treat as library component (remove the App_Code.compiled file)-App_Code視為類庫(刪除App_Code.compiled文件)
n??????? Merge each individual folder output to its own assembly-WEB項目中單獨的目錄會編譯到一個程序集中(參數:程序集前綴)
n??????? Merge all pages and control outputs to a single assembly-所有頁面控件編譯到一個程序集中(參數:程序集名稱)
n??????? Create a separate assembly for each page and control output-為每一個頁面和控件創建程序集
Signing使用key文件建立強命名空間的程序集
Deployment
n??????? Enable Web.config file section replacement-用不同的config文件替換Web.config中的節點
n??????? Create an IIS virtual directory for the output folder-創建IIS虛擬目錄(參數:虛擬目錄名稱)
n??????? Remove the App_Data folder from output location-刪除輸出目錄中的App_Data目錄
好了通過簡單的設置,就可以生成一個看上去非常“干凈利落”的bin目錄,每個程序集都很明顯,對部分升級工作很有幫助。
2006-6
實際上在我們的一個實際ASP.NET 2.0的解決方案中來應用這種方式出現了問題,下面我就講一下我的解決過程希望對大家有所幫助。
我們的解決方案包括22個項目(主要是類庫),其中的一個WEB項目是負責用戶UI的,傳統的生成或是發布網站的方式沒有任何問題,當使用Web Deployment Projects工具生成唯一程序集時出現了錯誤信息“Aspnet_merge.exe Exited with Code <?XML:NAMESPACE PREFIX = ST1 />1”(Aspnet_merge.exe 退出,錯誤代碼1),這樣的信息根本無法讓我們辦斷到底是哪里出了問題。好,下面依次打開VS 2005的工具-選項-項目和解決方案-生成并運行,設置“MSBuild 項目生成輸出詳細信息”,選擇“詳細”。再次生成Web Deployment Projects項目,注意“輸出”框內的信息現在變得非常豐富了,最后導致無法編譯的問題終于出來了“An error occurred when merging assemblies: ILMerge.Merge: ERROR!!: Duplicate type ‘_Default’ found in assembly 'App_Web_k5hhsnh0'”,它的意思是說在程序集中發現了相同的類型_Default,經過我檢查確實在我們的WEB項目中存在了兩個_Default類(在不同的目錄中),這樣的問題通過一般的生成完成和發布網站肯定都是檢測不出來的,運行也是正常的。ASP.NET支持的開發語言有哪些。VS 2005的WEB項目默認的把命名空間給去掉了,可以手動增加一個命名空間,cs代碼中加入namespace的語句塊,另外別忘了在aspx文件的<@page>的Inherits中寫入對應的[namespace].[類名];經過這樣的操作再次編譯成一個程序集就沒有問題了(備注:這個項目前后一共發現了5對類名稱一致的情況,加上命名空間或是改名稱就可以解決了)。
上面就是結合我的項目實際解決的問題,暫時還沒有發現別的錯誤出來。使用有問題的朋友也多多交流。
?