2012-10-18 34 views
20

我在我的C#類中有此代碼。當#if DEBUG運行時

#if DEBUG 
     private const string BASE_URL = "http://www.a.com/"; 
#else 
     private const string BASE_URL = "http://www.b.com//"; 
#endif 

我想問問什麼是它在代碼中

#if DEBUG 

路徑得到執行時?

是否得到執行

  1. 當我運行了在Visual Studio調試會話?
  2. 當我從調試文件夾中手動運行exe或dll問題?
  3. 任何其他情況我忘了提及?
+2

'#if DEBUG'從不運行,但會影響代碼編譯。 –

回答

31

#if DEBUG這是一個預處理器的定義。

它在您定義DEBUG常量時進行編譯。是的,它是Debug Build Configuration的默認設置。

Visual Studio 2010的項目屬性: Visual Studio 2010 Project Properties

如果Define DEBUG constant檢查VS會編譯:

private const string BASE_URL = "http://www.a.com/"; 

品(不打勾)VS會編譯:

private const string BASE_URL = "http://www.b.com//"; 
+0

優秀的答案。 VS2017仍然如此。 – robnick

12

這是一個預處理指令。 DEBUG部分中的代碼在您執行調試構建時編譯(更具體地說,在定義DEBUG常量時)。即如果您執行調試版本,BASE_URL將指向www.a.com。否則它會指向www.b.com。

7

當您使用DEBUG指令進行編譯時。所以如果它被設置,只有第一行將成爲編譯後的二進制文件的一部分,如果沒有設置,第二行將成爲二進制文件的一部分。

的DEBUG是默認設置,當你在編譯VS調試配置,但是你也可以手動設置任何配置

2

如果你正在編譯DEBUG配置,在else lin之前的代碼e將被編譯,而另一個則不會。如果你在其他配置中編譯,第二行將被編譯,而第一行不會。

+0

在VS中的項目的默認設置是正確的,但不使用VS或更改設置可能包括_any_配置中的DEBUG符號(包括髮布,如果你願意) –

+0

@RuneFS好點,謝謝。 –

3

這是一個「編譯器指令」,這意味着它實際上將包含或排除來自構建過程(或編譯)的代碼,這些代碼基於您放入的#if。就是說,DEBUG符號位於通常會在「發佈」版本中自動刪除項目和Visual Studio中的屬性。

所以基本上,它不一定要在調試中運行的Visual Studio中,並且它不必位於任何特定的文件夾中,您的代碼只是以這種方式構建的。

1

VS 2017實際上感測到活動配置,例如灰色調試條件如果選擇了發佈配置。

enter image description here

0

進入 「項目屬性」 - >構建應用程序的選項卡。如果配置:啓用(調試),則啓用調試配置。 下面的代碼將打印到控制檯。

#if DEBUG 
    Console.WriteLine("in debug mode..."); 
#endif 

如果Configuration:Active(Release),則啓用Release配置。下面的代碼將打印到控制檯。

#if RELEASE 
    Console.WriteLine("in release mode..."); 
#endif 

如果你想使用「調試/發佈/配置管理器」調試和發佈模式之間進行切換下拉權下的工具Menu.Apologies因爲大多數開發人員都知道...但有時被忽視並導致上述代碼無法正確運行的混淆。

相關問題