2009-12-10 70 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命令行参数,太 ;: