Freigeben über


Erstellen von RID-spezifischen, eigenständigen und AOT .NET-Tools

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
  • Ein RID-agnostisches Zeigerpaket: <packageName>.<packageVersion>.nupkg
    • Beispiel: mytool.1.0.0.nupkg

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 pack
    
  • Erstellen 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-arm64
    

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

  1. Lädt das Paket der obersten Ebene herunter.
  2. Liest die RID-spezifischen Metadaten.
  3. Identifiziert das am besten geeignete Paket für die aktuelle Plattform.
  4. 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:

  1. Erstellen Sie eine neue Konsolenanwendung:

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. Aktualisieren 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>
    
  3. Fügen Sie Ihren Anwendungscode in Program.cs:

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. Verpacken Sie das Paket der obersten Ebene.

    dotnet pack
    
  5. Packen Sie für jedes spezifische RID (auf der entsprechenden Plattform):

    Unter Windows:

    dotnet pack -r win-x64
    

    Unter Linux:

    dotnet pack -r linux-x64
    

    Unter MacOS:

    dotnet pack -r osx-arm64
    
  6. Veröffentlichen Sie alle Pakete mithilfe des Dotnet-Nuget-Pushbefehls auf NuGet.org.

Siehe auch