如何在C#/.NET中使用preprocessor directives实现仅Windows 10执行代码
问题解答:.NET中实现仅Windows 10系统执行指定代码的方案
首先明确:#define这类预处理器指令属于编译期判定逻辑,所有判断会在程序编译阶段完成,编译完成后代码逻辑就固定了。如果要实现「同一个程序在不同系统自动判断是否执行对应代码」,需要结合运行时系统检测逻辑,不同场景的实现方案如下:
方案1:编译期判定(仅适合分系统单独打包的场景)
如果你的程序会针对Windows 10和其他系统分别编译打包,可以用预处理器+自定义编译常量实现:
- 第一步:在项目的Windows 10专属生成配置中,添加自定义编译常量
操作路径:右键项目 → 「属性」 → 「生成」 → 「条件编译和符号」,填入自定义常量WINDOWS10 - 第二步:代码中用
#if指令包裹专属代码
#if WINDOWS10 // 这段代码只有在定义了WINDOWS10常量的编译配置下,才会被编译进最终程序集 Console.WriteLine("仅Windows 10版本程序会执行的代码"); #endif
注意:该方案编译出来的Windows 10版本程序,放到Windows 7上运行时这段代码仍然会执行,预处理器不会识别运行时的系统环境。
方案2:运行时检测(适合单包兼容多系统的主流场景)
如果需要同一个程序在不同系统上自动判定执行逻辑,需要搭配.NET提供的系统版本检测API,也可以和预处理器配合兼容不同版本的.NET框架:
.NET 5+ 环境下的极简实现
直接使用官方封装的系统版本判定方法:
if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) { // 仅Windows 10 1507及以上版本运行时才会执行的代码 Console.WriteLine("Windows 10专属逻辑"); }
兼容.NET Framework的实现
搭配Environment.OSVersion判断内核版本(Windows 10内核版本为10.0,Windows 7为6.1):
Version osVersion = Environment.OSVersion.Version; if (osVersion.Major == 10 && osVersion.Minor == 0) { // 仅Windows 10及以上执行的代码 }
注意:.NET Framework环境下需要在程序清单(manifest)中添加Windows 10兼容声明,否则
Environment.OSVersion可能返回兼容模式下的错误版本号。
搭配预处理器兼容多框架的写法
如果你的程序需要同时支持.NET 5+和.NET Framework,可以用预处理器区分不同框架的判定逻辑:
#if NET5_0_OR_GREATER if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 10240)) #elif NETFRAMEWORK Version osVersion = Environment.OSVersion.Version; if (osVersion.Major == 10 && osVersion.Minor == 0) #endif { // Windows 10专属执行逻辑 }
内容的提问来源于stack exchange,提问作者Commander
相关产品推荐
相关产品推荐

