在 .NET 中,条件编译通过预处理器指令和符号实现平台适配,支持 WINDOWS、LINUX、OSX、ANDROID、IOS 等内置符号,结合项目文件中的 DefineConstants 定义自定义符号,可在不同平台或架构下包含特定代码块,常用于跨平台库中调用系统 API 或区分移动与桌面逻辑,提升代码复用性与维护效率。

在 .NET 中,条件编译通过预处理器指令和条件编译符号来实现平台特定代码的控制。你可以根据目标平台(如 Windows、Linux、macOS 或移动平台)包含或排除某些代码块。
使用内置平台符号
.NET SDK 为常见平台提供了内置的条件编译符号,可在代码中直接使用:
- WINDOWS:Windows 平台
- LINUX:Linux 平台
- OSX:macOS 平台
- ANDROID:Android 应用
- IOS:iOS 应用
示例:
#if WINDOWS Console.WriteLine("运行在 Windows 上"); #elif LINUX Console.WriteLine("运行在 Linux 上"); #elif OSX Console.WriteLine("运行在 macOS 上"); #else Console.WriteLine("未知平台"); #endif
在项目文件中定义自定义符号
你可以在 .csproj 文件中通过 PropertyGroup 和 DefineConstants 添加自定义条件符号:
WINDOWS;DEBUG UNIX;LINUX;DEBUG
也可以针对不同架构或环境设置符号:
iWebMall 是一款高性能高扩展能力的开源 LAMP 电子商务软件,定位为大中型电子商务平台软件,服务于有建立电子商务需求的商业客户。这些商业客户不必学习任何计算机编程代码知识,只需要使用 iWebMall 软件他们就可以轻松建立一个功能强大的网上商城,实现用户注册、产品展示、在线定购、在线支付等电子商务功能;iWebMall 集成了产品发布与查询、会员注册登录、购物车、在线订单、在线支付、在
ANDROID;MOBILE
跨平台库中的实际应用
在编写跨平台库时,常需要调用平台特有的 API。例如处理文件路径或调用系统命令:
#if WINDOWS // 使用 PowerShell var cmd = "powershell.exe"; #else // 使用 shell var cmd = "/bin/bash"; #endif
或者在 MAUI 或 Xamarin 项目中区分移动端和桌面端:
#if ANDROID || IOS // 移动设备专用逻辑 var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); #else // 桌面端路径 var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyApp"); #endif
基本上就这些。合理使用条件编译符号能让你的代码更灵活,同时保持单一代码库支持多个平台。注意避免过度嵌套,确保可读性。调试时可通过 #error 检查符号是否生效:
#if DEBUG && WINDOWS #error 正在 Windows 调试模式下编译 #endif









