https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks#net-5-os-specific-tfms
https://docs.microsoft.com/zh-cn/dotnet/standard/frameworks#net-5-os-specific-tfms
TargetFrameworks輸出多版本類別庫,SDK 樣式專案中的目標框架
以應用或庫中的框架為目標時,需要指定想要向應用或庫提供的 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 Standard 版本 |
|---|---|---|---|
| .NET Standard | 2.1 | netstandard2.1 | 空值 |
| .NET Core | 3.1 | netcoreapp3.1 | 2.1 |
| .NET Framework | 4.8 | net48 | 2.0 |
支持的目標框架
目標框架通常由 TFM 參考, 下表顯示 .NET SDK 和 NuGet 客戶端支持的目標框架, 等效項顯示在括號內, 例如,win81 對于 netcore451 來說等效于 TFM,
| 目標 Framework | TFM |
|---|---|
| .NET 5(和 .NET Core) | netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 net5.0* |
| .NET Standard | netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1 |
| .NET Framework | net11 net20 net35 net40 net403 net45 net451 net452 net46 net461 net462 net47 net471 net472 net48 |
| Windows 應用商店 | netcore [netcore45] netcore45 [win] [win8] netcore451 [win81] |
| .NET Micro Framework | netmf |
| Silverlight | sl4 sl5 |
| Windows Phone | wp [wp7] wp7 wp75 wp8 wp81 wpa81 |
| 通用 Windows 平臺 | uap [uap10.0] uap10.0 [win10] [netcore50] |
* .NET 5.0 及更高版本的 TFM 包含特定于 OS 的變體, 有關詳細資訊,請參閱下一節:.NET 5 特定于 OS 的 TFM,
.NET 5 特定于 OS 的 TFM
對于每個 .NET 5.0 及更高版本的 TFM(例如 net5.0),都存在包含特定于 OS 的系結的 TFM 變體, 下表中顯示了這些變體,
| 特定于 OS 的格式 | 示例 |
|---|---|
| <base-tfm>-android | net5.0-android |
| <base-tfm>-ios | net5.0-ios |
| <base-tfm>-macos | net5.0-macos |
| <base-tfm>-tvos | net5.0-tvos |
| <base-tfm>-watchos | net5.0-watchos |
| <base-tfm>-windows | net5.0-windows |
你還可以指定可選的 OS 版本,例如 net5.0-ios12.0,
有關 .NET 5 TFM 的詳細資訊,請參閱 .NET 5 中的目標框架名稱,
如何指定目標框架
在專案檔案中指定目標框架, 指定單個目標框架時,使用 TargetFramework 元素, 以下控制臺應用專案檔案演示了如何面向 .NET 5.0:
XML<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>
<!-- Conditionally obtain references for the .NET Framework 4.0 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="System.Net" />
</ItemGroup>
<!-- Conditionally obtain references for the .NET Framework 4.5 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
<Reference Include="System.Net.Http" />
<Reference Include="System.Threading.Tasks" />
</ItemGroup>
</Project>
在庫或應用中,使用前處理器指令撰寫條件代碼,針對每個目標框架進行編譯:
C#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 目標框架的前處理器符號的完整串列如下:
| 目標框架 | 符號 |
|---|---|
| .NET Framework | NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20 |
| .NET Standard | NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0 |
| .NET 5(和 .NET Core) | NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0 |
已棄用的目標框架
以下目標框架已棄用, 面向這些目標框架的包應遷移到指定的替代框架,
| 已棄用的 TFM | Replacement |
|---|---|
| aspnet50 aspnetcore50 dnxcore50 dnx dnx45 dnx451 dnx452 |
netcoreapp |
| dotnet dotnet50 dotnet51 dotnet52 dotnet53 dotnet54 dotnet55 dotnet56 |
netstandard |
| netcore50 | uap10.0 |
| win | netcore45 |
| win8 | netcore45 |
| win81 | netcore451 |
| win10 | uap10.0 |
| winrt | netcore45 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/222061.html
標籤:.NET技术
上一篇:客戶的一個緊急bug,我用了兩種方式進行 C# 反編譯修改原始碼
下一篇:C#開發NDP452-KB2901907-x86-x64-AllOS-CHS.exe NDP452-KB2901907-x86-x64-AllOS-ENU.exe 下載
