今天把程式放上IIS後,居然出現在本機測試沒有出現的Error。去查了LOG,回到程式碼查看後,發現程式跑了一段我在本機處理時不曾跑過的函式,函式中需要驗證的機器因為沒有設定,所以才出現了Error。
但是為什麼在本機測試時,一直沒有出現這樣的錯誤呢?
程式中出現了下面的內容,於是我上網去查了C#的說明。
#if(!DEBUG)
.......
#endif
直接先說結論,這段程式的意思大致是,程式在非Debug模式下執行,會進入裡面的內容。而我在本機一直是用Debug模式在執行程式,所以才沒有發現這個問題。
這其實是個好用的設定,偶爾我們需要在Debug的模式下特別紀錄某些LOG或者特別執行某些程式來做測試,利用這個的功能就可以不調整程式的前提下,將一般模式與Debug模式分開處理。
要如何設定這個功能呢?
首先,在web.config中確認<compilation debug="true"/>這個設定是正確的。
接著關於如何判斷是否在Debug模式下,則有兩種做法。
1.如上方所述,利用#if(DEBUG)判斷:
將所有要在DEBUG模式下執行的程式,放在#if(DEBUG)與#endif之間即可,比較直觀,但是之後修改不易,可能讓程式中佈滿相關的if。一旦要修改也很難找到正確的修改位置。
2.利用 ConditionalAttribute 屬性來判斷:
這部分我目前尚未實測過,不過相較之下看起來比較容易將相關的程式放在一起,之後維護起來也比較方便。
在DEBUG模式下要處理的函式加上[Conditional("DEBUG")]即可,參考如下。
[Conditional("DEBUG")]Public void DebugLog()
{
......
}
日後有需要我應該會採用第二種做法,有時間也可能做個測試程式。
參考網頁如下:
https://dotblogs.com.tw/joysdw12/2014/03/14/asp-net-debug-release-if-else-conditional
沒有留言:
張貼留言