Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中有没有一种简单的方法可以基于OS版本使用条件编译符号_C#_Conditional Compilation - Fatal编程技术网

在C#中有没有一种简单的方法可以基于OS版本使用条件编译符号

在C#中有没有一种简单的方法可以基于OS版本使用条件编译符号,c#,conditional-compilation,C#,Conditional Compilation,我有一大堆单元测试需要根据Windows操作系统版本进行条件编译。 此单元测试正在测试仅在Windows Vista及更高版本中可用的TxF #if WIN_OS_VERSION >= 6.0 // Run unit tests #endif 我认为没有一种方法可以根据操作系统版本有条件地编译代码。#定义状态的文档(重点): 可以使用符号来指定 汇编条件。你可以 使用#if或#elif测试符号。 还可以使用条件属性执行条件编译 可以定义符号,但不能为符号赋值。定义 在使用任何指令之前,指

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

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

我认为没有一种方法可以根据操作系统版本有条件地编译代码。#定义状态的文档(重点):

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

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

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

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

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

您将不得不有条件地运行它:

void TestTxF() {
    if (System.Environment.OSVersion.Version.Major < 6) {
        // "pass" your test
    }
    else {
        // run it
    }
}
void TestTxF(){
if(System.Environment.OSVersion.Version.Major<6){
//“通过”你的测试
}
否则{
//运行它
}
}
更新:


您可以自己管理调试符号

只要想出一个可以坚持的模式(记录它!),然后在为新平台编译时,记住更改处理器指令

例如,您可以使用符号

LATER_THAN_XP
LATER_THAN_VISTA
etc...
然后可以使用
#ifdef
有条件地编译

#ifdef LATER_THAN_XP

//Run Unit Tests

#endif

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

谢谢Jon,这正是我想做的工作。