在Visual Studio中,最基礎的編譯模式有2中,Debug與Release.這也是預設的兩種方式,在建立一個project的時候,這兩種模式就已經存在。
我們也可以點擊那個Configuration Manager按鈕,去自己建立一個新的編譯模式。在建立這個編譯模式的時候,會問你是否要繼承自現在已有的某個,可以選擇Debug或者Release,也可以什麼都不選,這個繼承指的是一些編譯的方式,比如說是否要最佳化代碼什麼的。
那麼Debug與Release編譯模式到底有著什麼樣的區別。我們可以到Project的屬性中查看。在Build選項卡,我們可以看到Debug模式的具體的內容。最主要的是那個Optimize code選項沒有勾選,這樣就沒有壓縮dll,也就是說這裡還是含有一個調試資訊的,可以對程式進行調試。如果選擇了Release模式,預設是勾選了這個選項,就會對dll進行壓縮,這樣之後的dll會變得很小,但是就不能調試了。(當然也可以把Release模式下的壓縮dll選項取消,這樣做可以,但是沒有任何意義了,因為Release模式本應該就是要壓縮的,幹嘛把預設的取消,非要逆著正常人思維做事。)
看上邊這個選項頁,還有就是定義了DEBUG與TRACE的常量,這個常量是給Preprocessor使用的,也就是在VS中常見的#開頭的那些東西。這裡是定義了DEBUG這個常量,那麼在Debug模式下編譯這個程式,也就是說在Start那個框後邊選擇了Debug之後,下邊的這句Console.WriteLine才會被編譯到dll中,才會被CLR執行。如果是Release模式,就不會被編譯與執行。
#ifDEBUG
Console.WriteLine("Debugversion");
#endif
這是MSDN中所有的Preprocessor的列表:https://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx
如果是一個Website的項目,在項目publish的時候,也會涉及到Debug,Release,或者其他自訂的模式,比如說DeployToQA(繼承自Release),因為建立VS的一鍵部署的時候,需要選擇一種模式,這樣VS才知道把哪種編譯的dll放到server上邊。
而且,VS最新推出了一種Web.config的transform文法方式,你選擇了何種編譯模式,就要到Web.config的同一目錄下邊,找到Web.DeliveryInDev.config檔案,然後用相應的文法來編寫這個檔案,大致意思就是,以Web.config為模板,不過替換其中一些節點的內容,比如說,把database改為QA的資料庫的地址等。