是否为CLR版本定义了c#预编译器

时间:2009-12-10 09:19:56

标签: c# .net clr .net-4.0 clr4.0

我需要通过CLR版本有条件地编译代码 例如,我只需要在CLR 2(.NET 3.5 VS2008)中编译而不是在CLR 4(.NET 4 VS2010)中编译代码 是否有我可以在#if子句中使用的当前CLR版本的预编译器指令?

感谢。

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

您可以随时向MSBuild脚本添加一些检查CLR版本的内容,然后有条件地定义并将预处理器符号传递给编译器,该编译器可以使用#if在代码中进行测试。

答案 2 :(得分:0)

是的conditional compilation directives它们看起来就像C预处理器一样

编辑:完全误读了这个问题 - 休息时间

答案 3 :(得分:0)

根据here,答案是。但是,我们使用的一个技巧是将特定于版本的代码放入在运行时加载的程序集中。然后,您可以在运行时通过System.Runtime.InteropServices.RuntimeEnvironment获取CLR的版本.GetRuntimeDirectory()。

特定于版本的代码使用C#3.5以后的定位工具进行编译。

相关问题