2009-05-06 165 views

回答

15

你不能,不是真的。 你可以做的是定義一些「條件編譯符號」,如果你看一下你的項目設置的「Build」頁面,你可以在那裏設置它們,所以你可以編寫#if語句來測試它們。

調試符號被自動注入(默認情況下,這可以被關斷),用於調試版本。

所以你可以這樣寫代碼

#if DEBUG 
     RunMyDEBUGRoutine(); 
#else 
     RunMyRELEASERoutine(); 
#endif 

但是,除非你已經很好的理由不這樣做。在調試和發佈版本之間使用不同行爲的應用程序對任何人都沒有好處。

+1

開發Windows服務(無需安裝/調試變得更加容易) – Scoregraphic 2009-05-06 12:38:21

+0

@Scoregraphic時,它可以幫助:但是有相當不同的行爲(服務與命令行應用程序)! – 2009-05-06 12:49:03

0

我不相信你可以注入在編譯時到組裝,但你可以實現它的一種方法是使用的MSBuild並將其添加到應用程序的配置文件。

看到這個博客張貼有關如何使用的MSBuild做多環境配置文件 - http://adeneys.wordpress.com/2009/04/17/multi-environment-config/

或者你可以寫一個MSBuild任務,將編輯某個編譯的文件(你的C#或VB文件),並具有運行在BeforeBuild任務中。這將是相當棘手的,因爲你需要計算出將它注入文件的位置,但是假如你有一些標記化設置,你應該可以做到。我也懷疑它會很漂亮!

13

如果你卸載你的項目(在右鍵菜單),只是在</Project>標籤可以節省出一個其中有您的配置文件之前添加此。然後,您可以將它讀回來以便在您的代碼中使用。

<Target Name="BeforeBuild"> 
    <WriteLinesToFile File="$(OutputPath)\env.config" 
         Lines="$(Configuration)" Overwrite="true"> 
    </WriteLinesToFile> 
</Target> 
5

條件編譯符號可以用來實現這一點。您可以爲每個項目定義自定義符號屬性>構建設置窗格,並使用#if指令在代碼中測試它們。

實施例示出了如何定義符號UNOEURO以及如何使用它的代碼。

UNOEURO symbol defined here

bool isUnoeuro = false; 
#if UNOEURO 
    isUnoeuro = true; 
#endif