在 SDK-Style 的项目格式支持使用多框架开发,此时需要在代码里面通过条件编译符判断,在编译的时候执行不同的代码。
本文告诉大家在框架里面对应的预定义的条件编译符有哪些
static void Main() { #if NET40 Console.WriteLine("Target framework: .NET Framework 4.0"); #elif NET45 Console.WriteLine("Target framework: .NET Framework 4.5"); #else Console.WriteLine("Target framework: .NET Standard 2.0"); #endif }
以上写法是通过条件编译符,将会在不同条件满足的时候编译出不同的 IL 代码,关于条件编译符请看官方文档#if 预处理器指令
此时需要知道在 sdk style 的项目文件里面给不同的平台添加了哪些条件编译符可以使用
以下是预定义的宏
.NET Framework
所有 .NET Framework 都定义 NETFRAMEWORK
条件编译符,此外对应不同的版本使用不同的条件编译符
NET20
NET35
NET40
NET45
NET451
NET452
NET46
NET461
NET462
NET47
NET471
NET472
NET48
.NET Standard
所有 .NET Standard 都定义 NETSTANDARD
条件编译符,此外对应不同的版本使用不同的条件编译符
NETSTANDARD1_0
NETSTANDARD1_1
NETSTANDARD1_2
NETSTANDARD1_3
NETSTANDARD1_4
NETSTANDARD1_5
NETSTANDARD1_6
NETSTANDARD2_0
.NET Core
所有 .NET Core 都定义 NETCOREAPP
条件编译符,此外对应不同的版本使用不同的条件编译符
NETCOREAPP1_0
NETCOREAPP1_1
NETCOREAPP2_0
NETCOREAPP2_1
NETCOREAPP2_2
条件编译符,也叫预处理符号(preprocessor symbols) 在 Roslyn 的语法分析中,就是这样写的
在 csproj 或 Target 中可以采用下面代码判断条件编译符是否包含
Condition="$(DefineConstants.Contains(NET30))"