編譯の條件編譯
阿新 • • 發佈:2021-07-17
在 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))"