Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
- Esempio:
- Un pacchetto puntatore agnostico RID:
<packageName>.<packageVersion>.nupkg- Esempio:
mytool.1.0.0.nupkg
- Esempio:
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 packPacchetto 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:
- Scarica il pacchetto di primo livello.
- Legge i metadati specifici del RID.
- Identifica il pacchetto più appropriato per la piattaforma corrente.
- 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:
Creare una nuova applicazione console:
dotnet new console -n MyFastTool cd MyFastToolAggiornare 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>Aggiungere il codice dell'applicazione in
Program.cs:Console.WriteLine("Hello from MyFastTool!"); Console.WriteLine($"Running on {Environment.OSVersion}");Impacchettare il pacchetto di livello superiore
dotnet packPacchetto per ogni RID specifico (nella piattaforma corrispondente):
In Windows:
dotnet pack -r win-x64In Linux:
dotnet pack -r linux-x64In MacOS:
dotnet pack -r osx-arm64Pubblicare tutti i pacchetti in NuGet.org usando il comando push nuget dotnet .