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