我有一堆单元测试需要基于Windows操作系统版本进行条件编译。 此单元测试正在测试仅在Windows Vista及更高版本中可用的TxF。
#if WIN_OS_VERSION >= 6.0
// Run unit tests
#endif
答案 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任务,导出正确的符号以在编译时定义,但这比我的工资等级更高。