C#是否存在编译时标志可基于-r发布标记指定运行时需求?
C# 基于发布目标运行时的编译时条件编译方案
可以直接实现,.NET SDK会根据发布时指定的-r(--runtime)参数自动注入对应的编译符号,完全不需要手动添加#define指令。
常用自动定义的运行时符号
这些符号的命名规则为[操作系统]_[架构],常见的包括:
WINDOWS_X64:目标运行时为Windows x64LINUX_X64:目标运行时为Linux x64OSX_X64:目标运行时为macOS x64WINDOWS_ARM64:目标运行时为Windows ARM64LINUX_ARM64:目标运行时为Linux ARM64
如果只需要区分操作系统而不关注架构,也可以使用更通用的符号:WINDOWS、LINUX、OSX。
示例代码
直接使用这些自动注入的符号编写条件编译逻辑即可:
#if LINUX_X64 // 读取文件X的逻辑 #endif #if WINDOWS_X64 // 读取文件Y的逻辑 #endif
使用方式
发布时指定目标运行时,SDK会自动启用对应的编译符号:
# 发布到Linux x64,仅编译LINUX_X64代码段 dotnet publish -r linux-x64 # 发布到Windows x64,仅编译WINDOWS_X64代码段 dotnet publish -r win-x64
内容的提问来源于stack exchange,提问作者Arnold Zahrneinder
相关产品推荐
相关产品推荐

