Поделиться через


Целевые платформы

NuGet использует ссылки на целевую платформу в различных местах для определения и изоляции компонентов, зависимых от платформы пакета:

  • файл проекта: для проектов в стиле SDK CSPROJ содержит ссылки на целевую платформу.
  • Манифест nuspec: пакет может указывать на отдельные пакеты, которые должны быть включены в проект в зависимости от целевой платформы проекта.
  • Имя папки .nupkg: папки внутри папки пакета lib можно назвать в соответствии с целевой платформой, каждой из которых содержатся библиотеки DLL и другое содержимое, соответствующее этой платформе.
  • packages.config: targetframework атрибут зависимости указывает вариант устанавливаемого пакета.

Список канонических всех поддерживаемых целевых платформ и их синтаксиса TFM см. в разделе "Целевые платформы" в проектах в стиле SDK.

Значения TargetFramework — это псевдонимы

Свойство TargetFramework в файле проекта — это понятное имя — псевдоним, который преобразуется в каноническое удостоверение платформы. Пакет SDK для .NET выполняет этот перевод, задав TargetFrameworkMoniker (TFM) и при необходимости TargetPlatformMoniker свойства.

Например, при написании <TargetFramework>net10.0-windows</TargetFramework>пакет SDK для .NET преобразует это в:

  • TargetFrameworkMoniker = .NETCoreApp,Version=v10.0
  • TargetPlatformMoniker = Windows,Version=7.0

NuGet использует эти свойства моникера , а не TargetFramework строку для проверок совместимости пакетов. Это означает, что TargetFramework само значение может быть любой строкой, если свойства моникера заданы правильно. Например, следующий проект действителен:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>banana</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'banana' ">
    <TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
    <TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
    <TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
  </PropertyGroup>
</Project>

Этот проект восстанавливает и создает сборки для .NET 10.0, даже если TargetFramework значение равно banana. Пакет SDK для .NET уже использует этот механизм псевдонима для TFM для конкретной ОС, например net8.0-ios , где net8.0-androidкороткий TFM преобразуется в полный моникер с информацией о платформе.

Многоцелевой выбор с повторяющимися платформами

Начиная с NuGet 7.6 / .NET SDK 10.0.300, несколько TargetFrameworks псевдонимов могут разрешаться в одной эффективной платформе. Это позволяет сценариям, таким как сборки с несколькими версиями и целевые расширения с несколькими версиями. Дополнительные сведения о том, как это работает с восстановлением, пакетом, блокировкой файлов и ссылками на проекты, см. в статье "Назначение нескольких платформ".

Поддерживаемые платформы

Платформа обычно ссылается на короткий моникер целевой платформы или TFM. В .NET Standard это также обобщено в TxM , чтобы разрешить одну ссылку на несколько платформ.

Замечание

Исходный код клиента NuGet, вычисляющий приведенные ниже таблицы, находится в следующих расположениях:

Клиенты NuGet поддерживают платформы в таблице ниже. Эквиваленты отображаются в скобках []. Обратите внимание, что некоторые средства, например dotnet, могут использовать варианты канонических TFM в некоторых файлах. Например, dotnet pack используется .NETCoreApp2.0 в .nuspec файле, а не netcoreapp2.0. Различные клиентские средства NuGet правильно обрабатывают эти варианты, но при редактировании файлов всегда следует использовать канонические TFMs.

Имя Аббревиатура TFMs/TxMs
платформа .NET сеть net11
net20
net35
net40
net403
net45.
net451
net452
net46
net461
net462
net47
net471
net472
net48
Microsoft Store (Магазин Windows) netcore netcore [netcore45]
netcore45 [win, win8]
netcore451 [win81]
netcore50
Микрофреймворк .NET netmf netmf
Виндоус победа win [win8, netcore45]
win8 [netcore45, win]
win81 [netcore451]
win10 (не поддерживается платформой Windows 10)
Silverlight сл sl4
sl5
Windows Phone (SL) Wp wp [wp7]
wp7
wp75
wp8
wp81
Windows Phone (UWP) wpa81
Универсальная платформа Windows Uap uap [uap10.0]
uap10.0
uap10.0.xxxxx (где 10.0.xxxxx является целевой версией минимальной версии используемого приложения)
.NET Standard netstandard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3.
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET 5+ (и .NET Core) netcoreapp netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
сеть net5.0
net6.0
net7.0
net8.0
net9.0
net10.0
Tizen tizen tizen3
tizen4
Native родной родной

Устаревшие платформы

Следующие платформы устарели. Пакеты, предназначенные для этих платформ, должны перейти на указанные замены.

Нерекомендуемая платформа Replacement
aspnet50 netcoreapp
aspnetcore50
dnxcore50
dnx
dnx45
dnx451
dnx452
dotnet netstandard
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet555
dotnet56
winrt победа

Приоритет

Ряд платформ связаны друг с другом и совместимы друг с другом, но не обязательно эквивалентны:

Платформа Может использовать
uap (универсальная платформа Windows) Windows 8.1
wpa81
netcore50
win (Microsoft Store) winrt

.NET Standard

.NET Standard упрощает ссылки между двоичными платформами, что позволяет одной целевой платформе ссылаться на сочетание других платформ. (В фоновом режиме см. приложение .NET Primer.)

Средство NuGet Get Ближайшей платформы имитирует то, что NuGet использует для выбора одной платформы из многих доступных ресурсов платформы в пакете на основе платформы проекта.

Ряд dotnet моникеров следует использовать в NuGet 3.3 и более ранних версиях. netstandard Синтаксис моникера должен использоваться в версии 3.4 и более поздних версиях.

Переносимые библиотеки классов

Предупреждение

Не рекомендуется использовать pcLs. Хотя поддерживаются списки PCLs, авторы пакетов должны поддерживать netstandard вместо этого. Платформа .NET Standard — это эволюция PCLs и представляет двоичную переносимость на разных платформах с помощью одного моникера, который не привязан к статической библиотеке, такой как переносимые-a+b+c моникеры.

Чтобы определить целевую платформу, которая ссылается на несколько дочерних целевых платформ, portable ключевое слово, используемое для префикса списка ссылочных платформ. Избегайте искусственного включения дополнительных платформ, которые не компилируются напрямую против, так как это может привести к непреднамеренных побочных эффектов в этих платформах.

Дополнительные платформы, определенные третьими сторонами, обеспечивают совместимость с другими средами, доступными таким образом. Кроме того, существуют короткие номера профилей, доступные для ссылки на эти сочетания связанных платформ, как Profile#, но это не рекомендуется использовать эти числа, так как это снижает удобочитаемость папок и .nuspec.

Профиль # Платформы ФИО .NET Standard
Profile2 . NETFramework 4.0 portable-net40+win8+sl4+wp7
Windows 8.0
Silverlight 4.0
WindowsPhone 7.0
Профиль3 . NETFramework 4.0 portable-net40+sl4
Silverlight 4.0
Profile4 . NETFramework 4.5 portable-net45+sl4+win8+wp7
Silverlight 4.0
Windows 8.0
WindowsPhone 7.0
Profile5 . NETFramework 4.0 portable-net40+win8
Windows 8.0
Profile6 . NETFramework 4.0.3 portable-net403+win8
Windows 8.0
Profile7 . NETFramework 4.5 portable-net45+win8 netstandard1.1
Windows 8.0
Profile14 . NETFramework 4.0 portable-net40+sl5
Silverlight 5.0
Profile18 . NETFramework 4.0.3 portable-net403+sl4
Silverlight 4.0
Profile19 . NETFramework 4.0.3 portable-net403+sl5
Silverlight 5.0
Profile23 . NETFramework 4.5 portable-net45+sl4
Silverlight 4.0
Profile24 . NETFramework 4.5 portable-net45+sl5
Silverlight 5.0
Profile31 Windows 8.1 portable-win81+wp81 netstandard1.0
WindowsPhone 8.1 (SL)
Profile32 Windows 8.1 portable-win81+wpa81 netstandard1.2
WindowsPhone 8.1 (UWP)
Profile36 . NETFramework 4.0 portable-net40+sl4+win8+wp8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile37 . NETFramework 4.0 portable-net40+sl5+win8
Silverlight 5.0
Windows 8.0
Profile41 . NETFramework 4.0.3 portable-net403+sl4+win8
Silverlight 4.0
Windows 8.0
Profile42 . NETFramework 4.0.3 portable-net403+sl5+win8
Silverlight 5.0
Windows 8.0
Profile44 . NETFramework 4.5.1 portable-net451+win81 netstandard1.2
Windows 8.1
Profile46 . NETFramework 4.5 portable-net45+sl4+win8
Silverlight 4.0
Windows 8.0
Profile47 . NETFramework 4.5 portable-net45+sl5+win8
Silverlight 5.0
Windows 8.0
Profile49 . NETFramework 4.5 portable-net45+wp8 netstandard1.0
WindowsPhone 8.0 (SL)
Profile78 . NETFramework 4.5 portable-net45+win8+wp8+wp8 netstandard1.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile84 WindowsPhone 8.1 portable-wp81+wpa81 netstandard1.0
WindowsPhone 8.1 (UWP)
Profile88 . NETFramework 4.0 portable-net40+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profile92 . NETFramework 4.0 portable-net40+win8+wpa81
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile95 . NETFramework 4.0.3 portable-net403+sl4+win8+wp7
Silverlight 4.0
Windows 8.0
WindowsPhone 7.0
Profile96 . NETFramework 4.0.3 portable-net403+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profile102 . NETFramework 4.0.3 portable-net403+win8+wpa81
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile104 . NETFramework 4.5 portable-net45+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profile111 . NETFramework 4.5 portable-net45+win8+wpa81 netstandard1.1
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile136 . NETFramework 4.0 portable-net40+sl5+win8+wp8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Профиль143 . NETFramework 4.0.3 portable-net403+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile147 . NETFramework 4.0.3 portable-net403+sl5+win8+wp8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile151 NETFramework 4.5.1 portable-net451+win81+wpa81 netstandard1.2
Windows 8.1
WindowsPhone 8.1 (UWP)
Profile154 . NETFramework 4.5 portable-net45+sl4+win8+wp8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile157 Windows 8.1 portable-win81+wp81+wpa81 netstandard1.0
WindowsPhone 8.1 (SL)
WindowsPhone 8.1 (UWP)
Profile158 . NETFramework 4.5 portable-net45+sl5+win8+wp8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profile225 . NETFramework 4.0 portable-net40+sl5+win8+wpa81
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile240 . NETFramework 4.0.3 portable-net403+sl5+win8+wpa8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile255 . NETFramework 4.5 portable-net45+sl5+win8+wpa81
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Profile259 . NETFramework 4.5 portable-net45+win8+wpa81+wp81+wp8 netstandard1.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Profile328 . NETFramework 4.0 portable-net40+sl5+win8+wpa81+wp81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Profile336 . NETFramework 4.0.3 portable-net403+sl5+win8+wpa81+wp81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Profile344 . NETFramework 4.5 portable-net45+sl5+win8+wpa81+wp81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)

Кроме того, пакеты NuGet, предназначенные для Xamarin, могут использовать дополнительные платформы, определенные Xamarin:

Имя Описание .NET Standard
monoandroid Поддержка Mono для ОС Android netstandard1.4
monotouch Поддержка Mono для iOS netstandard1.4
monomac Поддержка Mono для OSX netstandard1.4
xamarinios Поддержка Xamarin для iOS netstandard1.4
xamarinmac Поддержка Xamarin для Mac netstandard1.4
xamarinpsthree Поддержка Xamarin в Playstation 3 netstandard1.4
xamarinpsfour Поддержка Xamarin в Playstation 4 netstandard1.4
xamarinpsvita Поддержка Xamarin в PS Vita netstandard1.4
xamarinwatchos Xamarin for Watch OS netstandard1.4
xamarintvos Xamarin for TV OS netstandard1.4
xamarinxboxthreesixty Xamarin для XBox 360 netstandard1.4
xamarinxboxone Xamarin для XBox One netstandard1.4

Замечание

Стивен Клири создал инструмент, который перечисляет поддерживаемые PCLs, которые можно найти в своем посте, профили Платформы в .NET.