Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- Ejemplo:
- Un paquete de puntero independiente de RID:
<packageName>.<packageVersion>.nupkg- Ejemplo:
mytool.1.0.0.nupkg
- Ejemplo:
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 packEmbalaje para cada RID específico en cada plataforma correspondiente
dotnet pack -r win-x64 dotnet pack -r linux-x64 dotnet pack -r osx-arm64Debe 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.
- Descarga el paquete de nivel superior.
- Lee los metadatos específicos del RID.
- Identifica el paquete más adecuado para la plataforma actual.
- 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:
Cree una nueva aplicación de consola:
dotnet new console -n MyFastTool cd MyFastToolActualice 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>Agregue el código de la aplicación en
Program.cs:Console.WriteLine("Hello from MyFastTool!"); Console.WriteLine($"Running on {Environment.OSVersion}");Empaquetar el paquete de nivel superior:
dotnet packPack para cada RID específico (en la plataforma correspondiente):
En Windows:
dotnet pack -r win-x64En Linux:
dotnet pack -r linux-x64En macOS:
dotnet pack -r osx-arm64Publique todos los paquetes en NuGet.org mediante el comando dotnet nuget push .