在C#中有一种简单的方法可以根据操作系统版本获得条件编译符号

我有一堆unit testing需要基于Windows操作系统版本进行条件编译。 此unit testing正在测试仅在Windows Vista及更高版本中可用的TxF。

#if WIN_OS_VERSION >= 6.0 // Run unit tests #endif 

我认为没有办法根据操作系统版本有条件地编译代码。 #define的文档说明(强调我的):

符号可用于指定编译条件。 您可以使用#if或#elif测试符号。 您还可以使用条件属性来执行条件编译。

您可以定义符号,但不能为符号指定值。 在使用任何非指令的指令之前,#define指令必须出现在文件中。

您还可以使用/ define编译器选项定义符号。 您可以使用#undef取消定义符号。

使用/ define或使用#define定义的符号不会与同名变量冲突。 也就是说,不应将变量名称传递给预处理程序指令,并且只能通过预处理程序指令来评估符号。

使用#define创建的符号范围是定义它的文件。

你必须有条件地运行它:

 void TestTxF() { if (System.Environment.OSVersion.Version.Major < 6) { // "pass" your test } else { // run it } } 

更新:

以前曾经问过这个问题。

您可以自己管理调试符号。

只需提出一个你可以坚持使用的模式( Document It! ),然后在编译新平台时,记住要更改处理器指令。

例如,你可以有符号

 LATER_THAN_XP LATER_THAN_VISTA etc... 

然后你可以使用#ifdef来有条件地编译

 #ifdef LATER_THAN_XP //Run Unit Tests #endif 

然后,您可以在项目属性中定义这些常量。 或者,如果你有冒险精神,你可以定义一个MSBuild任务,导出正确的符号,以便在编译时定义,但这比我的工资等级更高。