在 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))"