2012-10-04 93 views
2

裏面的代碼我只在調試模式下發布測試我的本地機器,我希望'#if調試'模式將工作,以便我可以測試功能,我不想在生產中。發佈在調試模式,但編譯器刪除#if調試

當我在調試模式下發布的web.config中仍具有

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

但是當我使用反射器對項目的DLL,它是這樣

#if debug 
    PlaceHolder1.Visible = true; 
#endif 

代碼是不存在的。我認爲編譯器已經刪除它。

注:我不是在談論構建,我正在談論發佈。做一個調試版本的工作,因爲我期望它與上面的代碼仍然存在

這是預期的行爲?當我以調試模式發佈時,是否有辦法讓編譯器包含這些代碼段?我是否全部錯了?

更新: 爲了響應@ Dash的評論我的封裝/發佈站點設置爲:

Package/Publish Web settings

+0

如果我使用'if#DEBUG',而不是'if#debug',那麼一定要在項目屬性中檢查'Package/Publish Web'設置以確保'Debug'是發佈時的活動構建配置。 – dash

+0

你的Build屬性頁面是什麼樣的?你有'定義DEBUG常數'打勾?如果我在Package/Publish Web頁面中設置了Debug,並且在Build選項卡上勾選了該選項,然後進行發佈,則適用於我,您可以使用ILSpy(http://ilspy.net/)檢查以確保你期待的代碼已經包含在內。 – dash

+0

@dash是定義DEBUG常量被打勾,但它不適用於我。我一直在使用http://www.reflector.net/來檢查發佈後的編譯代碼,但感謝關於ILSpy的提示,我之前沒有聽說過。爲了防止這種情況出現 – Dean

回答

1

在Visual Studio:

1. Right click on your project choose properties. 
2. Go to the "Build" tab 
3. Select Release in the "Configuration" combobox. 
4. Check the "Define DEBUG constant"-checkbox. 

請務必不要忘記部署到生產環境之前將其刪除。

編輯: 由於您使用小寫調試就可以代替步驟4在步驟4進入「條件編譯符號」調試(小寫): Conditional compilation symbols

+0

,我會給出另外一個設置。這看起來很有希望,但它已經打勾了(是的,我選擇了「發佈」配置)。我在更改配置時注意到「優化代碼」複選框沒有勾選以進行調試,但選擇了發佈的方式我會將其發送到 – Dean

+1

它區分大小寫,因此您應該編寫#if DEBUG – haiiaaa

+0

即使web.config有小寫調試?他們沒有關係嗎? – Dean

2

是的,那是預期的行爲。條件編譯指令(例如#if debug)僅在編譯時考慮。 C#代碼是在編譯時編譯的。那麼你指出的compilation debug選項是什麼?我不確定,但我認爲它會改變aspx頁面的編譯方式或網站如何運行構建的代碼,而這些代碼只是在查看頁面之前發生的,而不是構建代碼的時間。

4

C#預處理器符號是區分大小寫的。嘗試:

#if DEBUG 
+0

謝謝,我解決了這個問題,而且我的所有調試都是小寫調試。但這並不能解決我的問題 – Dean

+0

你說得對,我的道歉和感謝!但是,我理解這裏發生的事情的關鍵在於,web.config中定義的調試與DEBUG常量無關,並且可以在屬性窗口中對其進行更改。 – Dean

相關問題