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

时间:2010-05-13 23:27:01

标签: c# conditional-compilation

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

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

2 个答案:

答案 0 :(得分:4)

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

  

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

     

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

     

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

     

使用/ define定义的符号   或与#define不冲突   一个同名的变量。那是,   不应传递变量名称   到预处理器指令和   符号只能由a评估   预处理器指令。

     

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

您必须有条件地运行而不是:

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

<强>更新

有人问before

答案 1 :(得分:0)

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

刚出现一个你可以坚持使用的模式( Document It!)然后当你为一个新平台编译时,记得改变处理器指令。

例如,你可以有符号

LATER_THAN_XP
LATER_THAN_VISTA
etc...

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

#ifdef LATER_THAN_XP

//Run Unit Tests

#endif

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