2009-12-10 38 views
2

我需要通過CLR版本有條件地編譯代碼。
例如,我只需要在CLR 2(.NET 3.5 VS2008)中編譯代碼,而不是在CLR 4(.NET 4 VS2010)中編譯代碼
是否有可用於當前CLR版本的預編譯器指令#if子句?是否有CLR版本的c#預編譯器定義

謝謝。

回答

4

還不如我知道。

嘗試使用自己的一個,像這樣的:

#if CLR_V2 
    #if CLR_V4 
    #error You can't define CLR_V2 and CLR_V4 at the same time 
    #endif 

    code for clr 2 

#elif CLR_V4 

    code for clr 4 

#else 
    #error Define either CLR_V2 or CLR_V4 to compile 
#endif 

然後你就可以在Visual Studio中,或CSC命令行參數的項目屬性窗口中定義CLR_V2和/或CLR_V4。

+2

例如 類節目 { 靜態無效的主要(){ \t #如果CLR_V2 #如果CLR_V4 #ERROR你不能在同一時間 定義CLR_V2和CLR_V4 #ENDIF 控制檯。 WriteLine(「clr 2.0」); #elif指令CLR_V4 Console.WriteLine( 「CLR 4.0」); 的#else #ERROR定義要麼CLR_V2或CLR_V4編譯 #ENDIF } } – deerchao 2009-12-10 09:39:06

+0

感謝,在項目屬性的定義是,我錯過了什麼。 – 2009-12-12 16:44:18

1

你總是可以添加一些你的MSBuild腳本,檢查的CLR版本,然後有條件地定義並通過在預處理器符號可以在代碼中帶有#如果要測試的編譯器。

0

根據here答案是沒有。然而,我們使用的一個技巧是將特定於版本的代碼放入在運行時加載的程序集中。然後您可以在運行時通過System.Runtime.InteropServices.RuntimeEnvironment .GetRuntimeDirectory()獲取CLR的版本。

版本的特定代碼是用可從C#3.5起,針對設施進行編譯。使用系統 的#define CLR_V4 //可以在VS的項目屬性定義符號,或者通過CSC命令行參數,太 ;: