以應用或庫中的框架為目標時,需要指定想要向應用或庫提供的 API 集。 使用目標框架名字對象 (TFM) 在項目文件中指定目標框架。
應用或庫可以使用 .NET Standard 版本作為目標。 .NET Standard 版本表示所有 .NET 實現中的標准化 API 集。 例如,庫可以使用 .NET Standard 1.6 作為目標,並獲得對可使用相同基本代碼跨 .NET Core 和 .NET Framework 工作的 API 的訪問權限。
應用或庫還能以一個特定 .NET 實現為目標,獲得特定於實現的 API 的訪問權限。 例如,面向 Xamarin.iOS 的應用(如 Xamarin.iOS10)有權訪問 Xamarin 提供的適用於 iOS 10 的 iOS API 包裝器;面向通用 Windows 平台 (UWP) 的應用(如 uap10.0)有權訪問為運行 Windows 10 的設備編譯的 API。
對於某些目標框架(例如 .NET Framework),API 由框架在系統上安裝的程序集定義,並且可能包括應用程序框架 API(例如 ASP.NET)。
對於基於包的目標框架(例如 .NET Standard 和 .NET Core),API 由包含在應用或庫中的包定義。 元包 是一個 NuGet 包,NuGet 包本身不包含任何內容,只是一個依賴項列表(其他包)。 基於 NuGet 包的目標框架隱式指定一個元包,該元包引用一起構成框架的所有包。
最新版本
下表定義了最常見的目標框架、如何引用這些框架,以及它們實現的 .NET Standard 版本。 這些目標框架版本是最新的穩定版本。 預覽版不會顯示。 目標框架名字對象 (TFM) 是一個標准化令牌格式,用於指定 .NET 應用或庫的目標框架。

支持的目標框架
目標框架通常由 TFM 引用。 下表顯示 .NET SDK 和 NuGet 客戶端支持的目標框架。 等效項顯示在括號內。 例如,win81 對於 netcore451 來說等效於 TFM。


.NET 5 特定於 OS 的 TFM
對於每個 .NET 5.0 及更高版本的 TFM(例如 net5.0),都存在包含特定於 OS 的綁定的 TFM 變體。 下表中顯示了這些變體。

還可以指定可選的 OS 版本,例如 net5.0-ios12.0。有關 .NET 5 TFM 的詳細信息,請參閱 .NET 5 中的目標框架名稱。
如何指定目標框架
在項目文件中指定目標框架。 指定單個目標框架時,使用 TargetFramework 元素。 以下控制台應用項目文件演示了如何面向 .NET 5.0:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> </Project>
指定多個目標框架時,可有條件地為每個目標框架引用程序集。 在代碼中,可使用具有 -if-then-else 邏輯的預處理器符號,有條件地針對這些程序集進行編譯。
以下庫項目面向 .NET Standard (netstandard1.4) 和 .NET Framework(net40 和 net45)的 API。 將復數形式的 TargetFrameworks 元素與多個目標框架一起使用。 為兩個 .NET Framework TFM 編譯庫時,Condition 屬性包括特定於實現的包:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks> </PropertyGroup> <!-- 有條件地獲取.NET Framework 4.0 目標的引用 --> <ItemGroup Condition=" '$(TargetFramework)' == 'net40' "> <Reference Include="System.Net" /> </ItemGroup> <!-- 有條件地獲取.NET Framework 4.5 目標引用 --> <ItemGroup Condition=" '$(TargetFramework)' == 'net45' "> <Reference Include="System.Net.Http" /> <Reference Include="System.Threading.Tasks" /> </ItemGroup> </Project>
在庫或應用中,使用預處理器指令編寫條件代碼,針對每個目標框架進行編譯:
public class MyClass { 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 1.4"); #endif } }
使用 SDK 樣式項目時,生成系統可識別預處理器符號,這些符號表示支持的目標框架版本表中所示的目標框架。 使用表示 .NET Standard、.NET Core 或 .NET 5 TFM 的符號時,請用下划線替換點和連字符,並將小寫字母更改為大寫字母(例如,netstandard1.4 的符號為 NETSTANDARD1_4)。
.NET 目標框架的預處理器符號的完整列表如下:

參考微軟官方文檔: https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks
