在C#中,是否有一种简单的方法可以根据操作系统版本设置条件编译符号?

6

我有一堆单元测试需要根据Windows操作系统版本进行条件编译。 这些单元测试是用于测试仅在Windows Vista及以上版本中可用的TxF。

#if WIN_OS_VERSION >= 6.0
// Run unit tests
#endif
2个回答

4
我认为没有一种方法可以根据操作系统版本有条件地编译代码。#define的文档说明如下(重点是我的):
符号可用于指定编译条件。您可以使用#if或#elif测试符号。您还可以使用条件属性执行条件编译。
您可以定义一个符号,但不能为符号分配值。 #define指令必须出现在文件中,然后才能使用任何不是指令的指令。
您也可以使用/define编译器选项定义符号。您可以使用#undef取消定义符号。
使用/define或#define定义的符号不会与同名变量冲突。也就是说,变量名不应传递给预处理器指令,而符号只能由预处理器指令评估。
使用#define创建的符号的范围是定义它的文件。
因此,您将不得不有条件地运行它:
void TestTxF() {
    if (System.Environment.OSVersion.Version.Major < 6) {
        // "pass" your test
    }
    else {
        // run it
    }
}

更新:

这个问题之前已经被提出过,请参考


谢谢Jon,这正是我考虑作为一个解决方法的想法。 - John Simons

0

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

只需提前制定一个方案(文档化!),然后在为新平台编译时记得更改处理器指令即可。

例如,您可以拥有符号集:

LATER_THAN_XP
LATER_THAN_VISTA
etc...

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

#ifdef LATER_THAN_XP

//Run Unit Tests

#endif

然后你可以在项目属性中定义这些常量。或者,如果你感觉冒险的话,你可能会定义一个MSBuild任务,在编译时导出正确的符号来定义,但那对我来说有点超出我的能力范围。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接