Partilhar via


Crie ferramentas .NET específicas para RID, autónomas e AOT

Este artigo aplica-se a: ✔️ .NET SDK 10 e versões posteriores

Empacota ferramentas .NET para plataformas e arquiteturas específicas, para poderes distribuir aplicações nativas, rápidas e recortadas. Esta capacidade facilita a distribuição de aplicações .NET nativas, rápidas e simplificadas para ferramentas de linha de comandos como servidores MCP ou outras utilidades específicas da plataforma.

Visão geral

A partir do .NET SDK 10, pode criar ferramentas .NET que visam Identificadores de Tempo de Execução (RIDs) específicos. Estas ferramentas podem ser:

  • Específico para RID: Compilado para sistemas operativos e arquiteturas específicas.
  • Autónomo: Inclua o runtime .NET e não exija uma instalação .NET separada.
  • AOT nativo: Use compilação Ahead-of-Time para um arranque mais rápido e menor consumo de memória.

Quando os utilizadores instalam uma ferramenta específica para RID, a CLI .NET seleciona e instala automaticamente o pacote apropriado para a sua plataforma.

Optar por embalagens específicas para RID

Para criar uma ferramenta específica para RID, configure o seu projeto com uma das seguintes propriedades do MSBuild:

Propriedade RuntimeIdentifiers

Use RuntimeIdentifiers para especificar as plataformas que a sua ferramenta suporta:

<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 de Identificadores de Tempo de Execução do Pacote de Ferramentas

Alternativamente, use ToolPackageRuntimeIdentifiers para configuração de 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 dos valores de RID. Para uma lista de Identificadores de Tempo de Execução, consulte o catálogo RID.

Embale a sua ferramenta

O processo de empacotamento varia dependendo se está a utilizar a compilação AOT. Para construir um pacote NuGet, ou ficheiro .nupkg a partir do projeto, execute o comando dotnet pack .

Ferramentas específicas e autónomas para RID

Para ferramentas sem compilação AOT, execute dotnet pack uma vez:

dotnet pack

Este comando cria múltiplos 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 agnóstico ao RID: <packageName>.<packageVersion>.nupkg
    • Exemplo: mytool.1.0.0.nupkg

Ferramentas AOT

Para ferramentas com compilação AOT (<PublishAot>true</PublishAot>), deve embalar separadamente para cada plataforma:

  • Empacote o pacote de nível superior uma vez (em qualquer plataforma):

    dotnet pack
    
  • Embale para cada RID específico na plataforma correspondente:

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

    Tens de executar cada comando pack específico do RID na plataforma correspondente porque a compilação AOT produz binários nativos. Para mais informações sobre os pré-requisitos para a compilação Native AOT, veja Native AOT deployment.

Estrutura do pacote

Tipos de embalagem

Os pacotes de ferramentas específicos para RID usam dois tipos de pacotes:

  • DotnetTool: O pacote de topo que contém metadados.
  • DotnetToolRidPackage: Os pacotes específicos do RID que contêm os binários das ferramentas reais.

Metadados do pacote

O pacote topo inclui metadados que sinalizam que é uma ferramenta específica do RID e listam os pacotes específicos do RID. Quando executas dotnet tool install, a CLI lê estes metadados para determinar qual o pacote específico de RID a instalar para a plataforma atual.

Publique a sua ferramenta

Publique todos os pacotes no NuGet.org ou no seu feed de pacotes usando dotnet nuget push:

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

Execute uma ferramenta específica para RID

Os utilizadores executam ferramentas específicas do RID da mesma forma que ferramentas independentes da plataforma:

dnx mytool

O CLI faz automaticamente:

  1. Descarrega o pacote de nível superior.
  2. Lê os metadados específicos do RID.
  3. Identifica o pacote mais adequado para a plataforma atual.
  4. Descarrega e executa o pacote específico para RID.

Exemplo: Criar uma ferramenta AOT

Aqui está um exemplo completo de como criar uma ferramenta RID específica compilada por AOT:

  1. Crie um novo aplicativo de console:

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. Atualize o ficheiro do projeto para permitir o empacotamento específico para 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 seu código de candidatura em Program.cs:

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. Embale o pacote topo de gama:

    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
    

    Em macOS:

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

Consulte também