Partager via


Créer des outils .NET qui sont spécifiques au RID, autonomes et AOT

Cet article s’applique à : ✔️ .NET SDK 10 et versions ultérieures

Packager des outils .NET pour des plateformes et des architectures spécifiques afin de distribuer des applications natives, rapides et réduites. Cette fonctionnalité facilite la distribution d’applications .NET natives, rapides et réduites pour les outils en ligne de commande tels que les serveurs MCP ou d’autres utilitaires spécifiques à la plateforme.

Aperçu

À compter du Kit de développement logiciel (SDK) .NET 10, vous pouvez créer des outils .NET qui ciblent des identificateurs d’exécution spécifiques (RID). Ces outils peuvent être les suivants :

  • Spécifique au RID : compilé pour des systèmes d’exploitation et des architectures particuliers.
  • Autonome : inclut le runtime .NET et ne nécessite pas d’installation distincte de .NET.
  • AOT natif : Utilisez la compilation anticipée pour accélérer le démarrage et réduire l’encombrement mémoire.

Lorsque les utilisateurs installent un outil spécifique au RID, l’interface CLI .NET sélectionne et installe automatiquement le package approprié pour leur plateforme.

Opter pour un emballage spécifique au RID

Pour créer un outil spécifique au RID, configurez votre projet avec l’une des propriétés MSBuild suivantes :

RuntimeIdentifiers, propriété

Permet RuntimeIdentifiers de spécifier les plateformes prises en charge par votre outil :

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

propriété ToolPackageRuntimeIdentifiers

Vous pouvez également utiliser cette option ToolPackageRuntimeIdentifiers pour la configuration RID spécifique à l’outil :

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

Utilisez une liste délimitée par des points-virgules de valeurs RID. Pour obtenir la liste des identificateurs d’exécution, consultez le catalogue RID.

Empaqueter votre outil

Le processus d’empaquetage diffère selon que vous utilisez la compilation AOT. Pour générer un package NuGet ou un fichier .nupkg à partir du projet, exécutez la commande dotnet pack .

Outils propres à RID et autonomes

Pour les outils sans compilation AOT, exécutez dotnet pack une fois :

dotnet pack

Cette commande crée plusieurs packages NuGet :

  • Un package pour chaque RID : <packageName>.<RID>.<packageVersion>.nupkg
    • Exemple : mytool.win-x64.1.0.0.nupkg
    • Exemple : mytool.linux-x64.1.0.0.nupkg
    • Exemple : mytool.osx-arm64.1.0.0.nupkg
  • Un paquet de pointeur indépendant de RID : <packageName>.<packageVersion>.nupkg
    • Exemple : mytool.1.0.0.nupkg

Outils AOT

Pour les outils avec la compilation AOT (<PublishAot>true</PublishAot>), vous devez effectuer un pack séparément pour chaque plateforme :

  • Empaquetez le package de niveau supérieur une seule fois (sur n’importe quelle plateforme) :

    dotnet pack
    
  • Pack pour chaque RID spécifique sur la plateforme correspondante :

    dotnet pack -r win-x64
    dotnet pack -r linux-x64
    dotnet pack -r osx-arm64
    

    Vous devez exécuter chaque commande de pack spécifique à RID sur la plateforme correspondante, car la compilation AOT produit des fichiers binaires natifs. Pour plus d’informations sur les prérequis pour la compilation AOT native, consultez déploiement AOT natif.

Structure de package

Types de packages

Les packages d’outils spécifiques au RID utilisent deux types de packages :

  • DotnetTool : package de niveau supérieur qui contient des métadonnées.
  • DotnetToolRidPackage : packages spécifiques au RID qui contiennent les fichiers binaires d’outils réels.

Métadonnées de paquet

Le package de niveau supérieur inclut des métadonnées qui signalent qu’il s’agit d’un outil spécifique au RID et répertorie les packages spécifiques au RID. Lorsque vous exécutez dotnet tool install, l’interface CLI lit ces métadonnées pour déterminer le package spécifique au RID à installer pour la plateforme actuelle.

Publier votre outil

Publiez tous les packages sur NuGet.org ou votre flux de package à l’aide de dotnet nuget push :

dotnet nuget push path/to/package/root/*.nupkg

Exécuter un outil spécifique au RID

Les utilisateurs exécutent des outils spécifiques au RID de la même façon que les outils indépendants de la plateforme :

dnx mytool

L'interface CLI automatise :

  1. Télécharge le package de niveau supérieur.
  2. Lit les métadonnées spécifiques au RID.
  3. Identifie le package le plus approprié pour la plateforme actuelle.
  4. Télécharge et exécute le package spécifique au RID.

Exemple : Créer un outil AOT

Voici un exemple complet de création d’un outil spécifique au RID compilé par AOT :

  1. Créez une application console :

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. Mettez à jour le fichier projet pour activer l’empaquetage spécifique à AOT et RID :

    <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. Ajoutez votre code d’application dans Program.cs:

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. Packez le package de niveau supérieur :

    dotnet pack
    
  5. Pack pour chaque RID spécifique (sur la plateforme correspondante) :

    Sur Windows :

    dotnet pack -r win-x64
    

    Sur Linux :

    dotnet pack -r linux-x64
    

    Sur macOS :

    dotnet pack -r osx-arm64
    
  6. Publiez tous les packages sur NuGet.org à l’aide de la commande dotnet nuget Push .

Voir aussi