首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#预处理器对操作系统的区分

C#预处理器对操作系统的区分
EN

Stack Overflow用户
提问于 2015-05-10 08:30:13
回答 4查看 9.2K关注 0票数 30

是否可以在C#中使用preprocessor区分操作系统?比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#if OS_WINDOWS
//windows methods
#elif OS_MAC
//mac  methods
#elif OS_LINUX
//linux methods
#endif
EN

回答 4

Stack Overflow用户

发布于 2018-02-12 06:34:43

你所要求的是可能的,但需要一些工作。

  1. csproj中定义预处理变量 _WINDOWS
  2. 在你的代码中使用这个 #如果_WINDOWS //您的窗口东西# stuff //您的*nix东西#endif

当您有依赖于操作系统的常量(例如,本机库名称)时,我发现这种技术很有用。

票数 49
EN

Stack Overflow用户

发布于 2015-05-10 08:33:45

不是的。遗憾的是,你做不到。这甚至是合乎逻辑的:如果你为AnyCPU编译,那么你的程序在任何平台上都是可执行的。

您可以做的是创建多个项目配置,在其中设置所需的#define (在项目的属性、生成、条件编译符号中)。

但也许这是一个XY问题..。通常你不需要这样做,而且你可以忍受

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{

}
else if (Environment.OSVersion.Platform == PlatformID.MacOSX)
{

}
else if (Environment.OSVersion.Platform == PlatformID.Unix)
{

}
票数 16
EN

Stack Overflow用户

发布于 2022-11-14 12:08:55

从MSBuild 15开始,就有一个性质函数IsOSPlatform()

它可用于在项目文件(*.csproj)中定义特定于操作系统的常量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('Windows'))">
  <DefineConstants>OS_WINDOWS</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('Linux'))">
  <DefineConstants>OS_LINUX</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('FreeBSD'))">
  <DefineConstants>OS_FREEBSD</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsOSPlatform('OSX'))">
  <DefineConstants>OS_MAC</DefineConstants>
</PropertyGroup>

这些常量可以在预处理指令中签入,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#if OS_WINDOWS
  // Windows-specific code
#elif OS_LINUX
  // Linux-specific code
#elif OS_FREEBSD
  // FreeBSD-specific code
#elif OS_MAC
  // Mac-specific code
#endif
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30153797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文