是否可以在C#
中使用preprocessor
区分操作系统?比如:
#if OS_WINDOWS
//windows methods
#elif OS_MAC
//mac methods
#elif OS_LINUX
//linux methods
#endif
发布于 2018-02-12 06:34:43
你所要求的是可能的,但需要一些工作。
csproj
中定义预处理变量
_WINDOWS当您有依赖于操作系统的常量(例如,本机库名称)时,我发现这种技术很有用。
发布于 2015-05-10 08:33:45
不是的。遗憾的是,你做不到。这甚至是合乎逻辑的:如果你为AnyCPU
编译,那么你的程序在任何平台上都是可执行的。
您可以做的是创建多个项目配置,在其中设置所需的#define
(在项目的属性、生成、条件编译符号中)。
但也许这是一个XY问题..。通常你不需要这样做,而且你可以忍受
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
}
else if (Environment.OSVersion.Platform == PlatformID.MacOSX)
{
}
else if (Environment.OSVersion.Platform == PlatformID.Unix)
{
}
发布于 2022-11-14 12:08:55
从MSBuild 15开始,就有一个性质函数:IsOSPlatform()
。
它可用于在项目文件(*.csproj)中定义特定于操作系统的常量:
<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>
这些常量可以在预处理指令中签入,例如:
#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
https://stackoverflow.com/questions/30153797
复制