在Visual Studio中,生成應用程序的時候有2種模式:Debug和Release。兩者之間如何取捨呢?
假設有這麼簡單的一段代碼,在主程序中調用方法M1,M1方法調用M2方法,M2方法調用M3方法,M3方法中拋出異常。
class Program{static void Main(string[] args){M1();Console.ReadKey();}static void M1(){M2();}static void M2(){M3();}static void M3(){throw new Exception("error");}}
選擇"Debug"模式,把斷點打在Console.ReadKey();代碼行。運行,並通過依次點擊"調試→窗口→調用堆棧",顯示"調用堆棧"窗口信息,如下:
選擇"Release"模式,再調試,顯示如下:
從堆棧信息可以看出:在Debug模式和Release模式下調試,Debug模式消耗更多的內存,所以運行較慢;而Release模式作了一些優化,消耗較少的內存,所以運行更快。
在實際情況中,應該把在Release模式下生成的應用程序部署到服務器上,因為Remease下生成的應用程序作了優化處理,相對Debug下生成的應用程序,運行更快。
另外,如果我們想讓一段代碼只在Debug模式下運行,可以使用Debug標記這樣寫:
#if DEBUGConsole.WriteLine(DateTime.Now);#endif
總的來說:
1、Release模式相比Debug模式,做了更多的優化,更適合在項目完成後部署到服務器上。而Debug模式更適合在調試的時候使用。
2、使用Debug標記的代碼,在Release模式下會被自動刪除。
“直接F5生成的release 結果是對的 但是我關掉以後從文件夾打開,結果又不對了 ”
這主要是你的應用程序運行過程需要加載一系列的動態鏈接庫(DLL),在VS環境中,已經設置了一些搜索路徑,所以調試時可以找到他們。而你在文件夾雙擊的時候,如果程序需要某DLL,就會在當前目錄、系統目錄查找,如果都找不到的話,自然無法運行了^_^
通常有2類解決方法:
一、 動態鏈接MFC庫,將DLL一同發布出去
1.1 手工方法
通過VS的命令提示符環境中的dumpbin.exe查看你的主輸出文件(××.exe)運行依賴於哪些DLL,手工把他們找出來,和你的exe放在同一個目錄下,轉移到其他機器的時候整個目錄拷貝過去。
1.2 使用安裝工具
最便捷的就是VS內置的發布工具了。
在VS中“新建項目”-“其他項目類型”-“安裝和部署”-“安裝向導”,按照提示設置一下。當你選取需要發布的應用程序項目時,一旦找到其“主輸出”(對應××.exe),向導會自動搜索出依賴的DLL。
編譯這個“安裝項目”後,生成了*.msi文件,以後直接運行它就可以進行安裝(好像MS Office等專業軟件一樣^_^)。
二、靜態鏈接MFC庫
在解決方案管理器窗口,右擊項目名,選“屬性”。在“項目默認值”中,找到“MFC的使用”,選“在靜態庫中使用MFC”。這樣就可以把依賴的那些DLL中,需要的函數都靜態鏈接到exe中。最終只要一個exe就可以運行了。
不過這樣靜態鏈接的exe體積會臃腫很多,^_^
DEBU是調試版本,可以說是系統還在開發中Release是發布版本,說明系統可以給用戶使用了 主要區別是在於運行時產生的信息不同,以及運行的性能不同