Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo se aplica a: ✔️ SDK do .NET 10 e versões posteriores
Empacotar ferramentas do .NET para plataformas e arquiteturas específicas para que você possa distribuir aplicativos nativos, rápidos e cortados. Essa funcionalidade facilita a distribuição de aplicativos .NET nativos, rápidos e cortados para ferramentas de linha de comando, como servidores MCP ou outros utilitários específicos da plataforma.
Visão geral
A partir do SDK do .NET 10, você pode criar ferramentas do .NET direcionadas a RIDs (Identificadores de Runtime) específicos. Essas ferramentas podem ser:
- Específico do RID: compilado para sistemas operacionais e arquiteturas específicos.
- Autossuficiente: incluído o runtime do .NET e não requer uma instalação separada do .NET.
- AOT nativo: use a compilação antecipada para uma inicialização mais rápida e um volume de memória menor.
Quando os usuários instalam uma ferramenta específica de RID, a CLI do .NET seleciona e instala automaticamente o pacote apropriado para sua plataforma.
Aceitar o empacotamento específico do RID
Para criar uma ferramenta específica de RID, configure seu projeto com uma das seguintes propriedades do MSBuild:
Propriedade RuntimeIdentifiers
Use RuntimeIdentifiers para especificar as plataformas compatíveis com a ferramenta:
<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>
Propriedade ToolPackageRuntimeIdentifiers
Como alternativa, use ToolPackageRuntimeIdentifiers para configurar o RID específico da ferramenta:
<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>
Use uma lista delimitada por ponto-e-vírgula de valores RID. Para obter uma lista de Identificadores de Runtime, consulte o catálogo RID.
Empacote sua ferramenta
O processo de empacotamento difere dependendo se você está usando a compilação AOT. Para criar um pacote NuGet ou um arquivo .nupkg do projeto, execute o comando do pacote dotnet .
Ferramentas independentes e específicas do RID
Para ferramentas sem compilação AOT, execute dotnet pack uma vez:
dotnet pack
Este comando cria vários pacotes NuGet:
- Um pacote para cada RID:
<packageName>.<RID>.<packageVersion>.nupkg- Exemplo:
mytool.win-x64.1.0.0.nupkg - Exemplo:
mytool.linux-x64.1.0.0.nupkg - Exemplo:
mytool.osx-arm64.1.0.0.nupkg
- Exemplo:
- Um pacote de ponteiro independente RID:
<packageName>.<packageVersion>.nupkg- Exemplo:
mytool.1.0.0.nupkg
- Exemplo:
Ferramentas AOT
Para ferramentas com compilação AOT (<PublishAot>true</PublishAot>), você deve empacotar separadamente para cada plataforma:
Empacote o pacote de nível superior uma vez (em qualquer plataforma):
dotnet packEmpacote para cada RID específico na plataforma correspondente.
dotnet pack -r win-x64 dotnet pack -r linux-x64 dotnet pack -r osx-arm64Você deve executar cada comando de pacote específico de RID na plataforma correspondente porque a compilação AOT produz binários nativos. Para obter mais informações sobre os pré-requisitos para a compilação AOT nativa, consulte a implantação do AOT nativo.
Estrutura do pacote
Tipos de pacote
Os pacotes de ferramentas específicos do RID usam dois tipos de pacote:
- DotnetTool: o pacote de nível superior que contém metadados.
- DotnetToolRidPackage: os pacotes específicos do RID que contêm os binários de ferramentas reais.
Metadados do pacote
O pacote de nível superior inclui metadados que sinalizam que é uma ferramenta específica de RID e lista os pacotes específicos do RID. Quando você executa dotnet tool install, a CLI lê esses metadados para determinar qual pacote específico do RID será instalado para a plataforma atual.
Publicar sua ferramenta
Publique todos os pacotes no NuGet.org ou no feed de pacotes usando dotnet nuget push:
dotnet nuget push path/to/package/root/*.nupkg
Executar uma ferramenta específica para RID
Os usuários executam ferramentas específicas do RID da mesma maneira que as ferramentas independentes da plataforma:
dnx mytool
A CLI automaticamente:
- Baixa o pacote de nível superior.
- Lê os metadados específicos do RID.
- Identifica o pacote mais apropriado para a plataforma atual.
- Baixa e executa o pacote específico do RID.
Exemplo: criar uma ferramenta AOT
Aqui está um exemplo completo da criação de uma ferramenta específica do RID compilada por AOT:
Crie um novo aplicativo de console:
dotnet new console -n MyFastTool cd MyFastToolAtualize o arquivo de projeto para habilitar o empacotamento específico de 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>Adicione o código do aplicativo em
Program.cs:Console.WriteLine("Hello from MyFastTool!"); Console.WriteLine($"Running on {Environment.OSVersion}");Empacote o pacote de nível superior:
dotnet packEmpacotar para cada RID específico (na plataforma correspondente):
No Windows:
dotnet pack -r win-x64No Linux:
dotnet pack -r linux-x64No macOS:
dotnet pack -r osx-arm64Publique todos os pacotes em NuGet.org usando o comando dotnet nuget push.