1. 程式人生 > 其它 >編譯の條件編譯

編譯の條件編譯

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