2010-07-20 59 views
10

我試圖找到一個明確的解釋是什麼效果編譯在發佈模式對.NET 3.5 Web應用程序與debug =「false」。到目前爲止,它看起來像設置調試=「假」具有相同的效果和在釋放模式下編譯已貶值,但我找不到任何確鑿的證據。發佈模式vs調試=「false」

這個問題看上去很有前途,但似乎在回答什麼是調試和發佈之間的差異建立,而不是釋放模式和調試=「真」: What's the difference between compilation debug="false" and Release mode?

但是它鏈接到這篇文章: http://odetocode.com/blogs/scott/archive/2005/11/15/debug-and-release-builds-in-asp-net-2-0.aspx

「這個新的編譯模型使得Web站點的配置管理器過時了,在Visual Studio 2005網站」project「中出現的唯一選項是一個Debug配置,不要擔心 - 它意味着什麼。現在掌管學校。「

現在,這是我最接近的一個答案,它似乎暗示發佈模式已貶值,有利於調試=「假」,但我無法在MSDN上找到任何確認或任何其他來源。

任何幫助將不勝感激。

更新

對不起;澄清這是我所指的「Web應用程序項目」。

要稍微改一下我的問題,如果我有web.config中的以下設置:

<compilation defaultLanguage="c#" debug="false">

什麼樣的影響(如果有的話)並釋放和調試模式編譯有哪些?

回答

5

你必須小心你的單詞選擇。有「Web應用程序」和「網站」項目。

「網站」項目沒有「發佈」配置。網站只使用web.config的編輯部分中的調試設置。如果打開「網站」,請注意「配置管理器」中列出的唯一配置是「調試」。您可以通過項目的「MSBuild選項」屬性頁面或「發佈網站」對話框來控制編譯。

配置「Release」和「Debug」按照「Web Application」項目的預期工作。

1

「發佈」模式&「調試」模式背後的想法是,在調試模式下,編譯包含調試符號,這對調試非常有用,但對於生產無用,因爲它會降低進程速度。

但是,「釋放」模式會刪除這些調試符號,因此該流程運行良好,沒有任何問題。

現在,微軟已經在Web應用程序項目中實現了上述模型,而網站項目略有不同。希望這可以幫助。

6

TL; DR =更重要的是編譯debug =「true | false」。但是,在Debug中編譯也會對性能產生較小影響。

Debug和Release之間的差異(除了定義DEBUG常量或不)之外是「優化代碼」標誌,它在Debug中被禁用並且在Release中被啓用。 (如果你看一下項目的設置,建立標籤。)

「優化代碼」標誌告訴語言編譯器做一些優化(比如刪除未使用的變量,並留下了一些調試符號)生產的DLL時。與沒有設置標誌的情況相比,這只是一個相對較小的性能改進(可能對C++和C#/ VB的影響更大),並且DLL內存使用率略有下降。

編譯debug =「true」標誌告知JIT編譯器該代碼應該連接起來進行調試。這會降低多個維度(加載時間,運行時間,內存和資源加載)的性能,但可以調試運行代碼。

如果您想在生產環境中使用更詳細的堆棧跟蹤,那麼您可以運行帶有編譯debug =「false」的Debug版本,而性能差別很小。但我會測試兩者的表現,以確保你不會失去太多。

信用分屬於this answer鏈接到this blog entry,我後來發現this one,其中包含所有這些信息。

0

以下是區別。如果你有這樣的在你的web.config文件:

<system.web> 
    <compilation debug="true" .../> 

你從Visual Studio中的下拉列表中選擇Release(注意,它們是衝突的),將一切都在調試模式或發佈模式下進行編譯?

Visual Studio對編譯Web應用程序一無所知。建立一個Web應用程序,並檢查bin文件夾,你會發現它是空的。那是因爲ASP.NET編譯它。 ASP.NET將使用配置文件中的compilation debug標誌來了解如何編譯.cs文件,構建表單和用戶控件等。它還將使用此標誌來決定是否應執行捆綁和縮小。

This article概括起來相當漂亮:

總之,你控制調試和發佈版本使用匯編部分的調試屬性在web.config中 - 除非你與發佈命令或預編譯的網站網站部署工具。 WSD將允許您選擇調試或發佈版本,預編譯站點,並適當修改web.config。

相關問題