Condividi tramite


Creare strumenti specifici per RID, autonomi e AOT .NET

Questo articolo si applica a: ✔️ .NET SDK 10 e versioni successive

Creare un pacchetto di strumenti .NET per piattaforme e architetture specifiche in modo da poter distribuire applicazioni native, veloci e tagliate. Questa funzionalità semplifica la distribuzione di applicazioni .NET native, veloci e ottimizzate per strumenti a riga di comando come server MCP o utilità specifiche della piattaforma.

Informazioni generali

A partire da .NET SDK 10, è possibile creare strumenti .NET destinati a identificatori di runtime specifici (RID). Questi strumenti possono essere:

  • Specifico del RID: compilato per sistemi operativi e architetture particolari.
  • Indipendente: includere il runtime .NET e non richiedere un'installazione .NET separata.
  • AOT nativo: usare la compilazione anticipata per velocizzare l'avvio e il footprint di memoria inferiore.

Quando gli utenti installano uno strumento specifico di RID, l'interfaccia della riga di comando di .NET seleziona e installa automaticamente il pacchetto appropriato per la piattaforma.

Acconsentire esplicitamente alla creazione di pacchetti specifici per RID

Per creare uno strumento specifico di RID, configurare il progetto con una delle proprietà MSBuild seguenti:

Proprietà RuntimeIdentifiers

Usare RuntimeIdentifiers per specificare le piattaforme supportate dallo strumento:

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

In alternativa, usare ToolPackageRuntimeIdentifiers per la configurazione RID specifica dello strumento:

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

Usare un elenco delimitato da punto e virgola di valori RID. Per un elenco degli identificatori di runtime, vedere il catalogo RID.

Impacchetta il tuo strumento

Il processo di creazione dei pacchetti varia a seconda che si stia usando la compilazione AOT. Per compilare un pacchetto NuGet o un file con estensione nupkg dal progetto, eseguire il comando dotnet pack .

Strumenti specifici e autonomi per RID

Per gli strumenti senza compilazione AOT, eseguire dotnet pack una sola volta:

dotnet pack

Questo comando crea più pacchetti NuGet:

  • Un pacchetto per ogni RID: <packageName>.<RID>.<packageVersion>.nupkg
    • Esempio: mytool.win-x64.1.0.0.nupkg
    • Esempio: mytool.linux-x64.1.0.0.nupkg
    • Esempio: mytool.osx-arm64.1.0.0.nupkg
  • Un pacchetto puntatore agnostico RID: <packageName>.<packageVersion>.nupkg
    • Esempio: mytool.1.0.0.nupkg

Strumenti AOT

Per gli strumenti con compilazione AOT (<PublishAot>true</PublishAot>), è necessario comprimere separatamente per ogni piattaforma:

  • Comprimere il pacchetto di primo livello una sola volta (in qualsiasi piattaforma):

    dotnet pack
    
  • Pacchetto per ogni RID specifico nella piattaforma corrispondente:

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

    È necessario eseguire ogni comando pack specifico del RID sulla piattaforma corrispondente perché la compilazione AOT produce file binari nativi. Per altre informazioni sui prerequisiti per la compilazione AOT nativa, vedere Distribuzione AOT nativa.

Struttura del pacchetto

Tipi di pacchetto

I pacchetti di strumenti specifici di RID usano due tipi di pacchetto:

  • DotnetTool: pacchetto di primo livello che contiene metadati.
  • DotnetToolRidPackage: pacchetti specifici del RID che contengono i file binari effettivi dello strumento.

Metadati del pacchetto

Il pacchetto di primo livello include metadati che segnalano che si tratta di uno strumento specifico del RID ed elenca i pacchetti specifici del RID. Quando si esegue dotnet tool install, l'interfaccia della riga di comando legge questi metadati per determinare quale pacchetto specifico del RID installare per la piattaforma corrente.

Pubblicare lo strumento

Pubblicare tutti i pacchetti su NuGet.org o nel repository di pacchetti usando dotnet nuget push:

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

Eseguire uno strumento specifico di RID

Gli utenti eseguono strumenti specifici di RID allo stesso modo degli strumenti indipendenti dalla piattaforma:

dnx mytool

L'interfaccia a riga di comando opera automaticamente:

  1. Scarica il pacchetto di primo livello.
  2. Legge i metadati specifici del RID.
  3. Identifica il pacchetto più appropriato per la piattaforma corrente.
  4. Scarica ed esegue il pacchetto specifico del RID.

Esempio: Creare uno strumento AOT

Di seguito è riportato un esempio completo della creazione di uno strumento specifico di RID compilato con AOT:

  1. Creare una nuova applicazione console:

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. Aggiornare il file di progetto per abilitare la creazione di pacchetti specifici di AOT e 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. Aggiungere il codice dell'applicazione in Program.cs:

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. Impacchettare il pacchetto di livello superiore

    dotnet pack
    
  5. Pacchetto per ogni RID specifico (nella piattaforma corrispondente):

    In Windows:

    dotnet pack -r win-x64
    

    In Linux:

    dotnet pack -r linux-x64
    

    In MacOS:

    dotnet pack -r osx-arm64
    
  6. Pubblicare tutti i pacchetti in NuGet.org usando il comando push nuget dotnet .

Vedere anche