Compartilhar via


Criar ferramentas .NET específicas para RID, autocontidas e AOT

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
  • Um pacote de ponteiro independente RID: <packageName>.<packageVersion>.nupkg
    • Exemplo: mytool.1.0.0.nupkg

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 pack
    
  • Empacote para cada RID específico na plataforma correspondente.

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

    Você 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:

  1. Baixa o pacote de nível superior.
  2. Lê os metadados específicos do RID.
  3. Identifica o pacote mais apropriado para a plataforma atual.
  4. 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:

  1. Crie um novo aplicativo de console:

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. Atualize 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>
    
  3. Adicione o código do aplicativo em Program.cs:

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. Empacote o pacote de nível superior:

    dotnet pack
    
  5. Empacotar para cada RID específico (na plataforma correspondente):

    No Windows:

    dotnet pack -r win-x64
    

    No Linux:

    dotnet pack -r linux-x64
    

    No macOS:

    dotnet pack -r osx-arm64
    
  6. Publique todos os pacotes em NuGet.org usando o comando dotnet nuget push.

Consulte também