VS.Net中程序集的Debug版本和Release版本的區別

前幾天看到豆腐的文章介紹如何知道程序集是Debug版還是Release版,之前只知道某些軟件從功能上有企業版、標準版之分,卻從不知道.Net程序集還有Debug和Release之區別,真是慚愧學了這一年C#。然後在博客園的提問區發文求教,兩天過去竟無人問津(還是自己太懶,要檢討),只好自己翻MSDN、用Google搜,現在總算有點明白了。

關於Debug和Release,MSDN裏面是這麼說的:

Visual Studio 項目對程序的發佈和調試版本分別有單獨的配置。顧名思義,生成調試版本的目的是用於調試,而生成發佈版本的目的是用於版本的最終分發。
如果在 Visual Studio 中創建程序,Visual Studio 將自動創建這些配置並設置適當的默認選項和其他設置。在默認設置下:
程序的“調試”配置用全部符號調試信息編譯,不進行優化。(優化會使調試複雜化,因爲源代碼和生成的指令間的關係更加複雜。)
程序的“發佈”配置被完全優化,不包含任何符號調試信息。調試信息可在單獨的 PDB 文件中生成。

當在程序集的屬性頁中選Debug模式時,設置如下:

點擊看大圖

當選擇Release模式時,設置如下:

點擊看大圖

 

兩者的不同點如下:

 

 

Debug模式下生成的程序集爲調試版本,未經優化;在bin/debug/目錄中有兩個文件,除了要生成的.exe或.dll文件外,還有個.pdb文件,這個.pdb文件中就記錄了代碼中的斷點等調試信息;Release模式下不包含調試信息,並對代碼進行了優化,/bin/release/目錄下只有一個.exe或.dll文件。

注意若要更改項目的生成模式,不能只從項目屬性頁上點“配置”下拉框更改,那樣不起作用,必須點右上角的“配置管理器”按鈕才能更改。

現在我還有個疑問:在項目文件夾下除了bin外,還有個obj目錄,裏面也有debug和release兩個子目錄,這不知是做什麼用的。


答:編譯是分模塊編譯的,每個模塊的編譯結果就保存在了OBJ目錄下。最後會合併爲一個exe或者dll文件保存到bin之中。因爲每次編譯都是增量編譯,也就是隻重新編譯改變了的模塊,所以這個OBJ的目錄的作用就是保存這些小塊的編譯結果,加快編譯速度。

可以採用release模式,發佈爲正式版本,在release模式下,建議不要採用增量編譯的模式,儘管增量編譯可以大大提高編譯速度,尤其是針對大項目時。但.net中增量編譯的技術是否像C++那樣擁有足夠的成熟度,目前不敢下斷言。
因爲在vs.net2002,有時會出現一些莫名其妙的問題,遇到這類情況時,把obj文件中的內容全部刪除後,再重新編譯,就可以恢復。

有些release版本生成之後,換一臺機子還是不能用,原因在於.dll文件的動態和靜態之分。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/muhuohacker/archive/2009/06/18/4281507.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章