Compartir a través de


Crear herramientas .NET específicas de RID, autónomas y AOT

Este artículo se aplica a: ✔️ SDK de .NET 10 y versiones posteriores

Empaquetar herramientas de .NET para plataformas y arquitecturas específicas para que pueda distribuir aplicaciones nativas, rápidas y recortadas. Esta funcionalidad facilita la distribución de aplicaciones .NET nativas, rápidas y recortadas para herramientas de línea de comandos como servidores MCP u otras utilidades específicas de la plataforma.

Información general

A partir del SDK de .NET 10, puede crear herramientas de .NET destinadas a identificadores en tiempo de ejecución (RID) específicos. Estas herramientas pueden ser:

  • Específico de RID: compilado para determinados sistemas operativos y arquitecturas.
  • Independiente: incluya el entorno de ejecución de .NET y no requiera una instalación independiente de .NET.
  • AOT nativo: use la compilación anticipada para un inicio más rápido y una superficie de memoria más pequeña.

Cuando los usuarios instalan una herramienta específica de RID, la CLI de .NET selecciona e instala automáticamente el paquete adecuado para su plataforma.

Optar por el paquete específico de RID

Para crear una herramienta específica de RID, configure el proyecto con una de las siguientes propiedades de MSBuild:

Propiedad RuntimeIdentifiers

Use RuntimeIdentifiers para especificar las plataformas que admite la herramienta:

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

Propiedad ToolPackageRuntimeIdentifiers

Como alternativa, use ToolPackageRuntimeIdentifiers para configuración de RID específica de herramientas.

<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 una lista delimitada por punto y coma de valores RID. Para obtener una lista de identificadores en tiempo de ejecución, consulte el catálogo rid.

Empaquetar la herramienta

El proceso de empaquetado difiere en función de si se usa la compilación AOT. Para compilar un paquete NuGet o un archivo .nupkg desde el proyecto, ejecute el comando dotnet pack .

Herramientas específicas de RID y autocontenidas

Para herramientas sin compilación de AOT, ejecute dotnet pack una vez:

dotnet pack

Este comando crea varios paquetes NuGet:

  • Un paquete para cada RID: <packageName>.<RID>.<packageVersion>.nupkg
    • Ejemplo: mytool.win-x64.1.0.0.nupkg
    • Ejemplo: mytool.linux-x64.1.0.0.nupkg
    • Ejemplo: mytool.osx-arm64.1.0.0.nupkg
  • Un paquete de puntero independiente de RID: <packageName>.<packageVersion>.nupkg
    • Ejemplo: mytool.1.0.0.nupkg

Herramientas de AOT

Para las herramientas con compilación AOT (<PublishAot>true</PublishAot>), debe empaquetar por separado para cada plataforma:

  • Empaquetar el paquete de nivel superior una vez (en cualquier plataforma):

    dotnet pack
    
  • Embalaje para cada RID específico en cada plataforma correspondiente

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

    Debe ejecutar cada comando de empaquetado específico para RID en la plataforma correspondiente porque la compilación AOT genera binarios nativos. Para obtener más información sobre los requisitos previos para la compilación AOT nativa, consulte Implementación de AOT nativa.

Estructura del paquete

Tipos de paquete

Los paquetes de herramientas específicos de RID usan dos tipos de paquete:

  • DotnetTool: el paquete de nivel superior que contiene metadatos.
  • DotnetToolRidPackage: los paquetes específicos de RID que contienen los archivos binarios de herramientas reales.

Metadatos del paquete

El paquete de nivel superior incluye metadatos que indican que es una herramienta específica de RID y enumera los paquetes específicos del RID. Al ejecutar dotnet tool install, la CLI lee estos metadatos para determinar qué paquete específico de RID se va a instalar para la plataforma actual.

Publicación de la herramienta

Publique todos los paquetes en NuGet.org o su fuente de paquetes mediante dotnet nuget push:

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

Ejecuta una herramienta específica de RID

Los usuarios ejecutan herramientas específicas de RID de la misma manera que las herramientas independientes de la plataforma:

dnx mytool

La CLI opera automáticamente.

  1. Descarga el paquete de nivel superior.
  2. Lee los metadatos específicos del RID.
  3. Identifica el paquete más adecuado para la plataforma actual.
  4. Descarga y ejecuta el paquete específico del RID.

Ejemplo: Creación de una herramienta AOT

Este es un ejemplo completo de creación de una herramienta específica de RID compilada por AOT:

  1. Cree una nueva aplicación de consola:

    dotnet new console -n MyFastTool
    cd MyFastTool
    
  2. Actualice el archivo de proyecto para habilitar el empaquetado específico de AOT y 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. Agregue el código de la aplicación en Program.cs:

    Console.WriteLine("Hello from MyFastTool!");
    Console.WriteLine($"Running on {Environment.OSVersion}");
    
  4. Empaquetar el paquete de nivel superior:

    dotnet pack
    
  5. Pack para cada RID específico (en la plataforma correspondiente):

    En Windows:

    dotnet pack -r win-x64
    

    En Linux:

    dotnet pack -r linux-x64
    

    En macOS:

    dotnet pack -r osx-arm64
    
  6. Publique todos los paquetes en NuGet.org mediante el comando dotnet nuget push .

Consulte también