ASP.NET 2.0的編譯行為

來源:互聯網
上載者:User

在從ASP.NET1.1向2.0遷移的時候在如何產生debug和release的構建(builds)方面做了調整.

1.1

在1.1的時候(對應的IDE是VS2003),在產生(build)菜單下面有一個組態管理員(Configuration Manager)的功能表項目.點擊這個功能表項目會彈出一個對話方塊,你從中可以選擇一些可用的構建配置.VS2003預設情況下提供了Debug和Release這兩種配置.在組態管理員(Configuration Manager)中選擇的配置資訊可以告訴VisualStudio如何編譯code-behind檔案.成功編譯後就會在bin目錄中產生一個.dll檔案(注:選擇Release模式不會產生pdb檔案),如果配置的時候需要產生偵錯符號(Debugging Symbols)的話,還會同時在bin目錄中產生一個包含偵錯符號的尾碼名為pdb的檔案(注:選擇Debug模式產生pdb檔案).

稍後,當這個應用程式接收到一個web請求就開始執行時,ASP.NET運行時(runtime)就會為應用程式的web表單 (web forms)和使用者控制項(user control)產生代碼,並且編譯產生的程式碼(這裡的代碼應該指的是MSIL代碼).運行時的編譯(JIT編譯)將會根據web.config中compilation節中的調試設定(debug setting)來決定是否編譯最佳化過的代碼,是否產生調試資訊.ASP.NET將把產生的結果放到臨時ASP.NET檔案目錄中(Temporary ASP.NET file).在VS2003中只有選擇Release模式並且同時在web.config中把debug設定為false才能產生真正的不帶偵錯符號的產品.

2.0

在2.0中有一個非常重要的概念就是:VS2005並不知道編譯一個web應用程式的任何資訊(knows nothing).在1.1中visual studio構建code-behind檔案,asp.net則負責構建web表單.而在2.0中vs2005把所有的編譯工作都交給了ASP.NET平台做.

有了這些概念後,這裡有兩種情境需要探討:構建一個不帶Web網站部署工程 的web應用程式和構建一個帶Web網站部署工程的web應用程式.我們先看第一種,當你讓Visual Studio構建一個web工程的時候,看起來好像什麼都沒有發生.你並沒有發現在你的工程中建立了一個bin目錄,裡面有編譯好的dll.這是因為現在是ASP.NET而不是Visual Studio來構建的.ASP.NET構建所有的的一切,包括.cs和.vb檔案.ASP.NET把結果程式集放到Temporary ASP.NET files目錄中,你可以自己開啟看看.由於是ASP.NET負責所有的編譯工作,所以web.config中間中complilation節的debug設定控制著當前應該是debug模式還是release模式.當debug設定為true的時候,你會發現產生程式集的同時會產生一個儲存調試資訊的pdb檔案.這種新的編譯模式使得對於一個web網站項目來說組態管理員已經過時了.在vs2005的組態管理員只能看到debug一個選項.不要著急,這不會有任何問題.實際上web.config中的debug設定控制著這些(和組態管理員沒有什麼關係).當你打算部署的時候,你發行就緒這個網站,構建->發布(Build->Publicsh)將先行編譯整個web應用程式並且把結果儲存在你選擇的目錄裡.你也可以把它發布到IIS或者FTP上.當你選擇發布(publish)命令的時候,你會看到一個對話方塊可以選擇目標位置,強命名選項等等.這些選項和命令列工具aspnet_compiler中用到的一些開關是一一對應的.aspnet_compiler工具還提供了是否產生偵錯符號的開關,但是這個選項在發布(publish)對話方塊中是停用.發布總是先行編譯一個不包含調試資訊的release版本.

注意:發布(publish)命令並不會改變web.config中的debug設定.發布命令總是編譯一個release版本.然後,如果你想先行編譯一個可更新(updateable)網站,以後可以在適當的時候更新網站(這將會導致動態編譯),這樣的動態編譯將會產生debug代碼和pdb檔案.

新的Web網站部署工程稍微改變了上面所說的情境.WSD在Visual Studio 2005的組態管理員(configuration manager)中添加了Release和Debug的配置.但是這並不意味著Visual Studio知道如何編譯web網站.而是,Visual Studio知道如何使用WSD提供的MSBuild檔案構建Debug或者Release版本.你現在可以在組態管理員中選擇Debug或者Release.這種請求最終還是要交給aspnet_complier執行的,發布命令也是這樣的.

和發布命令不同的是,一個WSD的Release構建會改變web.config中的debug設定為false.而且WSD會預設把release構建放到release目錄中,把debug構建放到debug目錄中,這對於使用.net開發非web form程式的人來說是很熟悉的.

裝上Visual Studio 2005 Service Pack 1後就可以建立web應用(web application)了,在VS2005中web應用的編譯行為和web網站(web site)又有區別.對於一個web應用工程來說,組態管理員中debug和release兩種模式都是可用的,但是不管選擇哪種模式,產生的程式集中都會包含一個pdb檔案,即使你在web.config中的compilation節的debug設定為false也沒有任何作用.選擇發布(publish)一個web應用也會帶著包含偵錯符號的pdb檔案.那麼是不是沒有辦法發布不帶pdb檔案的程式集?當然會有辦法.在web應用的工程檔案屬性à產生à進階,你可以看到如下一個對話方塊:


其中選擇none的時候會產生不帶pdb檔案的程式集.

 

總結:你可以使用web.config中的debug節的設定控制你要產生Debug版本還是Release版本 (前面這句話對web application不適用).但是你使用發布(publish)命令先行編譯web網站或者使用web網站部署工具情況除外.WSD會讓你選擇是產生Debug還是Release版本,然後先行編譯web網站,並且對應修改web.config的debug設定.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.