Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel bezieht sich auf: ✔️ .NET SDK 10 und höhere Versionen
Packen Sie .NET-Tools für bestimmte Plattformen und Architekturen, damit Sie systemeigene, schnelle und gekürzte Anwendungen verteilen können. Diese Funktion erleichtert das Verteilen systemeigener, schneller, gekürzter .NET-Anwendungen für Befehlszeilentools wie MCP-Server oder andere plattformspezifische Dienstprogramme.
Überblick
Ab .NET SDK 10 können Sie .NET-Tools erstellen, die auf bestimmte Runtime Identifiers (RIDs) abzielen. Diese Tools können folgendes sein:
- RID-spezifisch: Kompiliert für bestimmte Betriebssysteme und Architekturen.
- Eigenständig: Schließen Sie die .NET-Laufzeit ein, und benötigen Sie keine separate .NET-Installation.
- Native AOT: Verwenden Sie die Ahead-of-Time-Kompilierung für einen schnelleren Start und einen geringeren Speicherbedarf.
Wenn Benutzer ein RID-spezifisches Tool installieren, wählt die .NET CLI automatisch das entsprechende Paket für ihre Plattform aus und installiert es.
Melden Sie sich für RID-spezifische Verpackungen an.
Um ein RID-spezifisches Tool zu erstellen, konfigurieren Sie Ihr Projekt mit einer der folgenden MSBuild-Eigenschaften:
RuntimeIdentifiers-Eigenschaft
Wird RuntimeIdentifiers verwendet, um die Plattformen anzugeben, die Ihr Tool unterstützt:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<PackAsTool>true</PackAsTool>
<ToolCommandName>mytool</ToolCommandName>
<RuntimeIdentifiers>win-x64;linux-x64;osx-arm64</RuntimeIdentifiers>
</PropertyGroup>
</Project>
ToolPackageRuntimeIdentifiers-Eigenschaft
Alternativ können Sie die werkzeugspezifische RID-Konfiguration verwenden: ToolPackageRuntimeIdentifiers
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<PackAsTool>true</PackAsTool>
<ToolCommandName>mytool</ToolCommandName>
<ToolPackageRuntimeIdentifiers>win-x64;linux-x64;osx-arm64</ToolPackageRuntimeIdentifiers>
</PropertyGroup>
</Project>
Verwenden Sie eine durch Semikolons getrennte Liste von RID-Werten. Eine Liste der Runtime-IDs finden Sie im RID-Katalog.
Ihr Tool verpacken
Der Verpackungsprozess unterscheidet sich je nachdem, ob Sie die AOT-Kompilierung verwenden. Um ein NuGet-Paket oder eine nupkg-Datei aus dem Projekt zu erstellen, führen Sie den Dotnet Pack-Befehl aus.
RID-spezifische und in sich geschlossene Tools
Führen Sie für Tools ohne AOT-Kompilierung einmal folgendes aus dotnet pack :
dotnet pack
Mit diesem Befehl werden mehrere NuGet-Pakete erstellt:
- Ein Paket für jedes RID:
<packageName>.<RID>.<packageVersion>.nupkg- Beispiel:
mytool.win-x64.1.0.0.nupkg - Beispiel:
mytool.linux-x64.1.0.0.nupkg - Beispiel:
mytool.osx-arm64.1.0.0.nupkg
- Beispiel:
- Ein RID-agnostisches Zeigerpaket:
<packageName>.<packageVersion>.nupkg- Beispiel:
mytool.1.0.0.nupkg
- Beispiel:
AOT-Tools
Für Tools mit AOT-Kompilierung (<PublishAot>true</PublishAot>) müssen Sie für jede Plattform separat packen:
Packen Sie das Top-Level-Paket einmal (auf einer beliebigen Plattform):
dotnet packErstellen Sie ein Paket für jede spezifische RID auf der entsprechenden Plattform.
dotnet pack -r win-x64 dotnet pack -r linux-x64 dotnet pack -r osx-arm64Sie müssen jeden RID-spezifischen Packbefehl auf der entsprechenden Plattform ausführen, da die AOT-Kompilierung systemeigene Binärdateien erzeugt. Weitere Informationen zu den Voraussetzungen für die native AOT-Kompilierung finden Sie in der nativen AOT-Bereitstellung.
Paketstruktur
Pakettypen
RID-spezifische Toolpakete verwenden zwei Pakettypen:
- DotnetTool: Das Paket der obersten Ebene, das Metadaten enthält.
- DotnetToolRidPackage: Die RID-spezifischen Pakete, die die tatsächlichen Tool-Binärdateien enthalten.
Paketmetadaten
Das Paket der obersten Ebene enthält Metadaten, die signalisieren, dass es sich um ein RID-spezifisches Tool und listet die RID-spezifischen Pakete auf. Wenn Sie ausführen dotnet tool install, liest die CLI diese Metadaten vor, um zu bestimmen, welches RID-spezifische Paket für die aktuelle Plattform installiert werden soll.
Veröffentlichen Ihres Tools
Veröffentlichen Sie alle Pakete in NuGet.org oder Ihrem Paketfeed, indem Sie dotnet nuget push verwenden:
dotnet nuget push path/to/package/root/*.nupkg
Ausführen eines RID-spezifischen Tools
Benutzer führen RID-spezifische Tools auf die gleiche Weise wie plattformunabhängige Tools aus:
dnx mytool
Das Befehlszeilenprogramm erledigt automatisch:
- Lädt das Paket der obersten Ebene herunter.
- Liest die RID-spezifischen Metadaten.
- Identifiziert das am besten geeignete Paket für die aktuelle Plattform.
- Lädt das RID-spezifische Paket herunter und führt es aus.
Beispiel: Erstellen eines AOT-Tools
Hier ist ein vollständiges Beispiel zum Erstellen eines AOT-kompilierten RID-spezifischen Tools:
Erstellen Sie eine neue Konsolenanwendung:
dotnet new console -n MyFastTool cd MyFastToolAktualisieren Sie die Projektdatei, um AOT und RID-spezifische Verpackungen zu aktivieren:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net10.0</TargetFramework> <PackAsTool>true</PackAsTool> <ToolCommandName>myfasttool</ToolCommandName> <RuntimeIdentifiers>win-x64;linux-x64;osx-arm64</RuntimeIdentifiers> <PublishAot>true</PublishAot> <PackageId>MyFastTool</PackageId> <Version>1.0.0</Version> <Authors>Your Name</Authors> <Description>A fast AOT-compiled tool</Description> </PropertyGroup> </Project>Fügen Sie Ihren Anwendungscode in
Program.cs:Console.WriteLine("Hello from MyFastTool!"); Console.WriteLine($"Running on {Environment.OSVersion}");Verpacken Sie das Paket der obersten Ebene.
dotnet packPacken Sie für jedes spezifische RID (auf der entsprechenden Plattform):
Unter Windows:
dotnet pack -r win-x64Unter Linux:
dotnet pack -r linux-x64Unter MacOS:
dotnet pack -r osx-arm64Veröffentlichen Sie alle Pakete mithilfe des Dotnet-Nuget-Pushbefehls auf NuGet.org.