ASP.NET 2.0下的條件編譯

NO IMAGE

在Web開發中測試單個頁面的功能實在是太麻煩,從首頁使用者名稱、密碼進去後,經過一些操作後才可以來到你要測試的那個頁面。(其實無論做什麼的開發,測試單個功能都是很麻煩)。抱著小心謹慎的態度,我一般喜歡寫幾段測一次,如果每次都興師動眾的啟動整個專案來測試顯然是很不經濟的做法。

我一般會在Solution中新增一個用於測試用的配置,在其中增加一個“Test”之類的編譯指令,然後在程式碼中,把一些測試條件,測試方法放到這個指令下。在開發團隊還沒有引進單元測試之類的概念的時候,我可不想用新增一個測試專案這樣的方法來做這種事情。而且對於象Web下單個的Page這樣的情況我也不知道應該是如何進行法。所以還是用以前自己的編譯指令這種方法比較的輕車熟路點。

(我以前在寫一些非WEB下的東西的時候,也喜歡把測試方法與類本身寫在一個檔案裡,然後用編譯指令區分開,如果要測試,就直接在開發環境下選擇”Test”的那個配置,然後啟動TestDriven來測試之,不用啟動整個專案對機器省力多了,TestDriven這個東西很管用的。
如果你是用C#作開發的,在開發環境中,如果當前這個編譯條件不滿足的時候,那些程式碼都會灰掉,而且可以縮排,一點都不障眼)

 

不過我的那些伎倆,在VS2005下有點不管用了,現在WEB開發跟以前有點區別了。在上面找來找去都找不到地方來新增編譯指令,非WEB的開發還是可以找到地方新增的。折騰了半天,發現現在把一些設定的東西都放到Web.config裡來了,條件編譯當然也不例外。

比如現在要加一個”Test”的條件編譯指令。在Web.config檔案中,在<compilation>這個節下加入下述語句就可以了。

      <compilers>

        <compiler language=”vb”

              type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″

              extension=”.VB”

              compilerOptions=”/define:Debug=True /define:Trace=True /define:Test=True “/>

        <compiler language=”c#”

            type=”Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″

            extension=”.cs”

            compilerOptions=”/d:DEBUG;TRACE;Test”/>

      </compilers>

 

很要命的,對每一種語言都要加一個<compiler>,當然如果專案中沒用到相應語言,也可以不用理它,可以刪掉。一般C#、VB用得比較的多,我只搞了這二種。

Web.config裡設定過後就不用在每一個需測試的頁面上去定義編譯指令了,不過還是沒有以前爽,以前直接在IDE工具欄上選擇一下配置就行了,現在硬是要寫這麼多東西,而且主要還是不方便切換。比如我不要在”Test”條件下啟動時,我還得跑到Web.config裡把上面一段東西註釋掉。
按照MSDN的說法,在.Net 2.0下,<compiler>這個element是deprecated的了,我這種做法好象不是正路。