Freigeben über


Zielframeworks

NuGet verwendet Zielframeworkverweise an verschiedenen Stellen, um frameworkabhängige Komponenten eines Pakets gezielt zu identifizieren und zu isolieren:

  • Projektdatei: Für PROJEKTE im SDK-Stil enthält csproj die Zielframeworkverweise.
  • .nuspec manifest: Ein Paket kann je nach Zielframework des Projekts unterschiedliche Pakete angeben, die in einem Projekt enthalten sein sollen.
  • .nupkg-Ordnername: Die Ordner innerhalb des Ordners eines Pakets lib können gemäß dem Zielframework benannt werden, von denen jede die DLLs und andere Inhalte enthält, die für dieses Framework geeignet sind.
  • packages.config: Das targetframework Attribut einer Abhängigkeit gibt die Variante eines zu installierenden Pakets an.

Die kanonische Liste aller unterstützten Zielframeworks und deren TFM-Syntax finden Sie unter Target Frameworks in SDK-Formatprojekten.

TargetFramework-Werte sind Aliase

Die TargetFramework Eigenschaft in einer Projektdatei ist ein Anzeigename – ein Alias – der in eine kanonische Frameworkidentität übersetzt wird. Das .NET SDK führt diese Übersetzung durch Festlegen der TargetFrameworkMoniker (TFM) und ggf. der TargetPlatformMoniker Eigenschaften durch.

Wenn Sie z. B. schreiben <TargetFramework>net10.0-windows</TargetFramework>, übersetzt das .NET SDK folgendes in:

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

NuGet verwendet diese Moniker-Eigenschaften – nicht die TargetFramework Zeichenfolge – für Paketkompatibilitätsprüfungen. Dies bedeutet, dass der TargetFramework Wert selbst eine beliebige Zeichenfolge sein kann, solange die Moniker-Eigenschaften richtig festgelegt sind. Das folgende Projekt ist beispielsweise gültig:

<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>

Dieses Projekt stellt .NET 10.0 wiederhergestellt und builds her, auch wenn der TargetFramework Wert lautet banana. Das .NET SDK basiert bereits auf diesem Aliasingmechanismus für osspezifische TFMs wie net8.0-ios und net8.0-android, wo der kurze TFM in den vollständigen Moniker mit Plattforminformationen übersetzt wird.

Multiadressierung mit doppelten Frameworks

Ab NuGet 7.6 / .NET SDK 10.0.300 können mehrere TargetFrameworks Aliase in dasselbe effektive Framework aufgelöst werden. Dies ermöglicht Szenarien wie Multi-RID-Builds und Die Zielbestimmung für die Multiversionserweiterung. Ausführliche Informationen dazu, wie dies mit Wiederherstellungs-, Pack-, Sperrdateien und Projektreferenzen funktioniert, finden Sie unter "Zielgruppenadressierung mehrerer Frameworks".

Unterstützte Frameworks

Auf ein Framework wird in der Regel von einem kurzen Zielframework-Moniker oder TFM verwiesen. In .NET Standard wird dies auch auf TxM generalisiert, um einen einzelnen Verweis auf mehrere Frameworks zuzulassen.

Hinweis

Der NuGet-Clientquellcode, der die folgenden Tabellen berechnet, finden Sie an den folgenden Speicherorten:

Die NuGet-Clients unterstützen die Frameworks in der folgenden Tabelle. Entsprechungen werden in eckigen Klammern [] angezeigt. Beachten Sie, dass einige Tools wie z dotnet. B. Variationen von kanonischen TFMs in einigen Dateien verwenden können. Wird z. B dotnet pack.NETCoreApp2.0 . in einer .nuspec Datei anstelle von netcoreapp2.0. Die verschiedenen NuGet-Clienttools behandeln diese Variationen ordnungsgemäß, sollten jedoch beim direkten Bearbeiten von Dateien immer kanonische TFMs verwenden.

Name Abkürzung TFMs/TxMs
.NET Framework netto net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
Microsoft Store (Windows Store) Netcore netcore [netcore45]
netcore45 [win, win8]
netcore451 [win81]
netcore50
.NET MicroFramework netmf netmf
Windows gewinnen win [win8; netcore45]
win8 [netcore45, win]
win81 [netcore451]
win10 (nicht unterstützt von der Windows 10-Plattform)
Silverlight Sl sl4
sl5
Windows Phone (SL) Wp wp [wp7]
wp7
wp75
wp8
wp81
Windows Phone (UWP) wpa81
Universelle Windows-Plattform Uap uap [uap10.0]
uap10.0
uap10.0.xxxxx (wobei 10.0.xxxxx die Zielplattform-Min-Version der verbrauchenden App ist)
.NET-Standard netstandard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET 5+ (und .NET Core) netcoreapp netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
netto net5.0
net6.0
net7.0
net8.0
net9.0
net10.0
Tizen tizen tizen3
tizen4
Einheimisch Systemeigen Systemeigen

Veraltete Frameworks

Die folgenden Frameworks sind veraltet. Pakete für diese Frameworks sollten zu den angegebenen Ersetzungen migriert werden.

Veraltetes Framework Ersetzung
aspnet50 netcoreapp
aspnetcore50
dnxcore50
Dnx
dnx45
dnx451
dnx452
dotnet netstandard
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
winrt gewinnen

Vorrang

Eine Reihe von Frameworks bezieht sich auf und ist miteinander kompatibel, aber nicht notwendigerweise gleichwertig:

Rahmenwerk Kann verwenden
uap (Universelle Windows-Plattform) Windows 8.1
wpa81
netcore50
win (Microsoft Store) winrt

NET Standard

.NET Standard vereinfacht Verweise zwischen binärkompatiblen Frameworks, sodass ein einzelnes Zielframework auf eine Kombination anderer verweisen kann. (Hintergrund finden Sie unter .NET Primer.)

Das NuGet Get Nearest Framework Tool simuliert, was NuGet verwendet, um ein Framework aus vielen verfügbaren Frameworkressourcen in einem Paket basierend auf dem Framework des Projekts auszuwählen.

Die dotnet Reihe von Monikern sollte in NuGet 3.3 und früher verwendet werden; die netstandard Monikersyntax sollte in v3.4 und höher verwendet werden.

Portable Klassenbibliotheken

Warnung

PCLs werden nicht empfohlen. Obwohl PCLs unterstützt werden, sollten Paketautoren stattdessen netstandard unterstützen. Der .NET Platform Standard ist eine Weiterentwicklung von PCLs und stellt binäre Portabilität über Plattformen hinweg dar, wobei ein einzelner Moniker verwendet wird, der nicht an eine statische Bibliothek wie portable-a+b+c moniker gebunden ist.

Um ein Zielframework zu definieren, das sich auf mehrere untergeordnete Zielframeworks bezieht, wird das portable Schlüsselwort verwendet, das zum Präfix der Liste der referenzierten Frameworks verwendet wird. Vermeiden Sie künstliches Einschließen von zusätzlichen Frameworks, die nicht direkt kompiliert werden, da sie zu unbeabsichtigten Nebenwirkungen in diesen Frameworks führen kann.

Zusätzliche von Drittanbietern definierte Frameworks bieten Kompatibilität mit anderen Umgebungen, auf die auf diese Weise zugegriffen werden kann. Darüber hinaus gibt es Kurzprofilnummern, die zur Referenz auf diese Kombinationen verwandter Frameworks verfügbar sind, Profile#aber dies ist keine empfohlene Methode, diese Zahlen zu verwenden, da sie die Lesbarkeit der Ordner und .nuspecder .

Profil # Rahmenwerke Vollständiger Name .NET-Standard
Profil2 . NETFramework 4.0 portable-net40+win8+sl4+wp7
Windows 8.0
Silverlight 4.0
WindowsPhone 7.0
Profil3 . NETFramework 4.0 portable-net40+sl4
Silverlight 4.0
Profil4 . NETFramework 4.5 portable-net45+sl4+win8+wp7
Silverlight 4.0
Windows 8.0
WindowsPhone 7.0
Profil5 . NETFramework 4.0 portable-net40+win8
Windows 8.0
Profil6 . NETFramework 4.0.3 portable-net403+win8
Windows 8.0
Profil7 . NETFramework 4.5 portable-net45+win8 netstandard1.1
Windows 8.0
Profil14 . NETFramework 4.0 portable-net40+sl5
Silverlight 5.0
Profil18 . NETFramework 4.0.3 portable-net403+sl4
Silverlight 4.0
Profil19 . NETFramework 4.0.3 portable-net403+sl5
Silverlight 5.0
Profil23 . NETFramework 4.5 portable-net45+sl4
Silverlight 4.0
Profil24 . NETFramework 4.5 portable-net45+sl5
Silverlight 5.0
Profil31 Windows 8.1 portable-win81+wp81 netstandard1.0
WindowsPhone 8.1 (SL)
Profil32 Windows 8.1 portable-win81+wpa81 netstandard1.2
WindowsPhone 8.1 (UWP)
Profil36 . NETFramework 4.0 portable-net40+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil37 . NETFramework 4.0 portable-net40+sl5+win8
Silverlight 5.0
Windows 8.0
Profil41 . NETFramework 4.0.3 portable-net403+sl4+win8
Silverlight 4.0
Windows 8.0
Profil42 . NETFramework 4.0.3 portable-net403+sl5+win8
Silverlight 5.0
Windows 8.0
Profil44 . NETFramework 4.5.1 portable-net451+win81 netstandard1.2
Windows 8.1
Profil46 . NETFramework 4.5 portable-net45+sl4+win8
Silverlight 4.0
Windows 8.0
Profil47 . NETFramework 4.5 portable-net45+sl5+win8
Silverlight 5.0
Windows 8.0
Profil49 . NETFramework 4.5 portable-net45+wp8 netstandard1.0
WindowsPhone 8.0 (SL)
Profil78 . NETFramework 4.5 portable-net45+win8+wp8 netstandard1.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil84 WindowsPhone 8.1 portable-wp81+wpa81 netstandard1.0
WindowsPhone 8.1 (UWP)
Profil88 . NETFramework 4.0 portable-net40+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profil92 . NETFramework 4.0 portable-net40+win8+wpa81
Windows 8.0
WindowsPhone 8.1 (UWP)
Profil95 . NETFramework 4.0.3 portable-net403+sl4+win8+wp7
Silverlight 4.0
Windows 8.0
WindowsPhone 7.0
Profil96 . NETFramework 4.0.3 portable-net403+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profil102 . NETFramework 4.0.3 portable-net403+win8+wpa81
Windows 8.0
WindowsPhone 8.1 (UWP)
Profil104 . NETFramework 4.5 portable-net45+sl4+win8+wp75
Silverlight 4.0
Windows 8.0
WindowsPhone 7.5
Profil111 . NETFramework 4.5 portable-net45+win8+wpa81 netstandard1.1
Windows 8.0
WindowsPhone 8.1 (UWP)
Profil136 . NETFramework 4.0 portable-net40+sl5+win8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil143 . NETFramework 4.0.3 portable-net403+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil147 . NETFramework 4.0.3 portable-net403+sl5+win8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil151 NETFramework 4.5.1 portable-net451+win81+wpa81 netstandard1.2
Windows 8.1
WindowsPhone 8.1 (UWP)
Profil154 . NETFramework 4.5 portable-net45+sl4+win8+wp8
Silverlight 4.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil157 Windows 8.1 portable-win81+wp81+wpa81 netstandard1.0
WindowsPhone 8.1 (SL)
WindowsPhone 8.1 (UWP)
Profil158 . NETFramework 4.5 portable-net45+sl5+win8+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.0 (SL)
Profil225 . NETFramework 4.0 portable-net40+sl5+win8+wpa81
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Profil240 . NETFramework 4.0.3 portable-net403+sl5+win8+wpa8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Profil255 . NETFramework 4.5 portable-net45+sl5+win8+wpa81
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
Profil259 . NETFramework 4.5 portable-net45+win8+wpa81+wp8 netstandard1.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Profil328 . NETFramework 4.0 portable-net40+sl5+win8+wpa81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Profil336 . NETFramework 4.0.3 portable-net403+sl5+win8+wpa81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)
Profil344 . NETFramework 4.5 portable-net45+sl5+win8+wpa81+wp8
Silverlight 5.0
Windows 8.0
WindowsPhone 8.1 (UWP)
WindowsPhone 8.0 (SL)

Darüber hinaus können NuGet-Pakete für Xamarin zusätzliche Xamarin-definierte Frameworks verwenden:

Name Beschreibung .NET-Standard
Monoandroid Mono-Unterstützung für Android-Betriebssystem netstandard1.4
Monotouch Mono-Unterstützung für iOS netstandard1.4
Monomac Mono-Unterstützung für OSX netstandard1.4
xamarinios Unterstützung für Xamarin für iOS netstandard1.4
xamarinmac Unterstützt für Xamarin für Mac netstandard1.4
xamarinpsthree Unterstützung für Xamarin auf Playstation 3 netstandard1.4
xamarinpsfour Unterstützung für Xamarin auf Playstation 4 netstandard1.4
xamarinpsvita Unterstützung für Xamarin auf PS Vita netstandard1.4
xamarinwatchos Xamarin für Watch OS netstandard1.4
xamarintvos Xamarin für TV OS netstandard1.4
xamarinxboxthreesixty Xamarin für XBox 360 netstandard1.4
xamarinxboxone Xamarin für XBox One netstandard1.4

Hinweis

Stephen Cleary hat ein Tool erstellt, das die unterstützten PCLs auflistet, die Sie in seinem Beitrag, Framework-Profile in .NET finden können.