2

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

谢谢。

4

4 回答 4

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。

于 2009-12-10T09:29:45.760 回答
1

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

于 2009-12-10T09:29:38.147 回答
0

是的,有条件编译指令,它们看起来就像 C 预处理器的东西

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

于 2009-12-10T09:30:00.997 回答
0

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

版本特定的代码是使用从 C#3.5 开始提供的目标工具编译的。

于 2009-12-10T09:32:42.973 回答