Introducción a la publicación de aplicaciones .NET
Las aplicaciones que cree con .NET se pueden publicar en dos modos diferentes y el modo afecta a la forma en que un usuario ejecuta la aplicación.
La publicación de la aplicación como independiente genera una aplicación que incluye el entorno de ejecución y las bibliotecas de .NET, así como la aplicación y sus dependencias. Los usuarios de la aplicación pueden ejecutarla en un equipo que no tenga instalado el entorno de ejecución de .NET.
La publicación de la aplicación como dependiente de la plataforma genera una aplicación que incluye únicamente la propia aplicación y sus dependencias. Los usuarios de la aplicación tienen que instalar por separado el entorno de ejecución de .NET.
Ambos modos de publicación generan un ejecutable específico de la plataforma de forma predeterminada. Las aplicaciones dependientes del marco se pueden crear sin un archivo ejecutable y estas aplicaciones son multiplataforma.
Cuando se genera un archivo ejecutable, puede especificar la plataforma de destino con un identificador en tiempo de ejecución (RID). Para obtener más información sobre los RID, vea el Catálogo de identificadores de entorno de ejecución (RID) de .NET.
En la tabla siguiente se describen los comandos que se usan para publicar una aplicación como dependiente del marco o independiente:
Tipo | Get-Help |
---|---|
archivo ejecutable dependiente del marco para la plataforma actual. | dotnet publish |
archivo ejecutable dependiente del marco para una plataforma específica. | dotnet publish -r <RID> |
binario dependiente del entorno. | dotnet publish |
archivo ejecutable independiente | dotnet publish -r <RID> --self-contained |
Para obtener más información, vea el artículo sobre el comando dotnet publish de .NET.
Generar un archivo ejecutable
Los ejecutables no son multiplataforma, son específicos de un sistema operativo y una arquitectura de CPU. Al publicar la aplicación y crear un archivo ejecutable, puede publicarla como independiente o dependiente de la plataforma. La publicación de una aplicación como independiente incluye el entorno de ejecución de .NET con la aplicación y los usuarios de la aplicación no tienen que preocuparse por instalar .NET antes de ejecutar la aplicación. La publicación de una aplicación como dependiente del marco de trabajo no incluye el entorno de ejecución de .NET; solo se incluyen la aplicación y las dependencias de terceros.
Los comandos siguientes generan un archivo ejecutable:
Tipo | Get-Help |
---|---|
archivo ejecutable dependiente del marco para la plataforma actual. | dotnet publish |
archivo ejecutable dependiente del marco para una plataforma específica. | dotnet publish -r <RID> |
archivo ejecutable independiente | dotnet publish -r <RID> --self-contained |
Generar un binario multiplataforma
Los archivos binarios multiplataforma se crean al publicar la aplicación como dependiente de la plataforma en forma de un archivo .dll. El archivo dll se denomina después del proyecto. Por ejemplo, si tiene una aplicación denominada word_reader, se crea un archivo denominado word_reader.dll. Las aplicaciones publicadas de esta manera se ejecutan con el comando dotnet <filename.dll>
y se pueden ejecutar en cualquier plataforma.
Los archivos binarios multiplataforma se pueden ejecutar en cualquier sistema operativo siempre que el entorno de ejecución de .NET de destino ya esté instalado. Si el entorno de ejecución de .NET de destino no está instalado, la aplicación podría seguir ejecutándose mediante una versión más reciente del entorno si está configurada para migración hacia adelante. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.
Puede optar por ejecutar la aplicación como un ejecutable específico de la plataforma o como un binario multiplataforma a través de dotnet
comando. No debe haber ninguna diferencia de comportamiento de la aplicación al iniciar el archivo ejecutable específico de la plataforma en comparación con el comando dotnet
para las aplicaciones de servidor normales. Iniciar a través de un ejecutable específico de la plataforma le proporciona una mejor integración con el sistema operativo subyacente. Por ejemplo:
- Verá el nombre ejecutable de la aplicación en la lista de procesos y no
dotnet
, lo que podría resultar confuso si hay más de uno. - Puede personalizar el archivo ejecutable específico de la plataforma con características específicas del sistema operativo. Por ejemplo, consulte esta explicación sobre cómo configurar el tamaño de pila predeterminado en Windows.
El comando siguiente genera un binario multiplataforma:
Tipo | Get-Help |
---|---|
archivo binario multiplataforma dependiente del marco. | dotnet publish |
Publicación como dependiente de la plataforma
Las aplicaciones publicadas como dependientes del marco son multiplataforma y no incluyen el entorno de ejecución de .NET. El usuario de tu aplicación debe instalar el entorno de ejecución de .NET.
La publicación de una aplicación como dependiente de la plataforma genera un archivo binario multiplataforma como archivo .dll y un archivo ejecutable específico de la plataforma que tiene como destino la plataforma actual. El archivo .dll es multiplataforma, pero el ejecutable no lo es. Por ejemplo, si publica una aplicación denominada word_reader y tiene como destino Windows, se crea un archivo ejecutable de word_reader.exe junto con word_reader.dll. Si el destino es Linux o macOS, se creará un archivo ejecutable lector_de_palabras junto con lector_de_palabras.dll. Si la aplicación usa un paquete NuGet que tenga implementaciones específicas de la plataforma, se copiarán las dependencias de todas las plataformas en la carpeta publish\runtimes\{plataforma}.
El binario multiplataforma de la aplicación se puede ejecutar con el comando dotnet <filename.dll>
y se puede ejecutar en cualquier plataforma.
Específico de la plataforma y dependiente del marco
Puede publicar una aplicación que dependa del framework y sea específica del sistema operativo pasando los parámetros de -r <RID>
al comando dotnet publish
. Publicar de esta manera es lo mismo que publicar dependiente del marco, excepto que las dependencias específicas de la plataforma se gestionan de forma diferente. Si la aplicación usa un paquete NuGet que tiene implementaciones específicas de la plataforma, solo se copian las dependencias de la plataforma de destino. Estas dependencias se copian directamente en la carpeta publicar.
Aunque técnicamente el binario generado es multiplataforma, al dirigirse a una plataforma específica, no se garantiza que la aplicación se ejecute entre plataformas. Puede ejecutar dotnet <filename.dll>
, pero la aplicación puede fallar cuando intenta acceder a dependencias específicas de la plataforma que están ausentes.
Para obtener más información sobre los RID, vea el Catálogo de identificadores de entorno de ejecución (RID) de .NET.
Ventajas
Implementación de pequeño tamaño.
En este caso solo se distribuyen la aplicación y sus dependencias. El usuario instala el entorno de ejecución y las bibliotecas de .NET y todas las aplicaciones comparten el tiempo de ejecución.Multiplataforma
Tu aplicación y cualquier biblioteca basada en .NET se ejecuta en otros sistemas operativos. No es necesario definir una plataforma de destino para la aplicación. Para obtener información sobre el formato de archivo .NET, consulte Formato del archivo de ensamblado de .NET.Usa el último tiempo de ejecución parcheado
La aplicación usa el entorno de ejecución más reciente (dentro de la familia principal-secundaria de destino de .NET) instalado en el sistema de destino. Esto significa que la aplicación usa automáticamente la versión revisada más reciente del entorno de ejecución de .NET. Este comportamiento predeterminado se puede invalidar. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.
Desventajas
Requiere preinstalar el entorno de ejecución
La aplicación solo se puede ejecutar si la versión de .NET que tiene como destino la aplicación ya está instalada en el sistema host. Puede configurar el comportamiento de puesta al día de la aplicación para requerir una versión específica de .NET o permitir una versión más reciente de .NET. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma..NET puede cambiar
Es posible que el entorno de ejecución y las bibliotecas de .NET se actualicen en el equipo donde se ejecuta la aplicación. En raras ocasiones, esto puede cambiar el comportamiento de la aplicación si usa las bibliotecas de .NET, lo que hacen la mayoría de las aplicaciones. Puede configurar cómo usa la aplicación versiones más recientes de .NET. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.
Ejemplos
Sirve para publicar una aplicación multiplataforma dependiente del marco. Se crea un archivo ejecutable destinado a la plataforma actual junto con el archivo dll. Las dependencias específicas de la plataforma se publican con la aplicación.
dotnet publish
Sirve para publicar una aplicación específica para la plataforma dependiente del marco. Se crea un archivo ejecutable de Linux de 64 bits junto con el archivo dll de . Solo las dependencias de la plataforma de destino se publican con la aplicación.
dotnet publish -r linux-x64
Publicación como independiente
La publicación de la aplicación como independiente genera un ejecutable específico de la plataforma. La carpeta de publicación de salida contiene todos los componentes de la aplicación, incluidas las bibliotecas de .NET y el entorno de ejecución de destino. La aplicación está aislada de otras aplicaciones .NET y no usa un entorno de ejecución compartido instalado localmente. No es necesario que el usuario de la aplicación descargue e instale .NET.
Puede publicar una aplicación independiente pasando el parámetro --self-contained
al comando dotnet publish
. El archivo binario ejecutable se genera para la plataforma de destino especificada. Por ejemplo, si tiene una aplicación denominada word_readery publica un ejecutable autocontenido para Windows, se crea un archivo word_reader.exe. Al publicar para Linux o macOS, se crea un archivo word_reader. La plataforma de destino y la arquitectura se especifican con el parámetro -r <RID>
para el comando dotnet publish
. Para obtener más información sobre los RID, consulte Catálogo de RID de .NET.
Si la aplicación tiene dependencias específicas de la plataforma, como un paquete NuGet que contiene dependencias específicas de la plataforma, se copian en la carpeta publish junto con la aplicación.
Ventajas
Control de la versión de .NET
Puede controlar qué versión de .NET se implementa con la aplicación.Destinatarios específicos de la plataforma
Dado que tienes que publicar la aplicación para cada plataforma, sabes dónde se ejecuta la aplicación. Si .NET presenta una nueva plataforma, los usuarios no pueden ejecutar la aplicación en esa plataforma hasta que publique una versión destinada a esa plataforma. Puede probar la aplicación para detectar problemas de compatibilidad antes de que los usuarios ejecuten la aplicación en la nueva plataforma.
Desventajas
Implementaciones de mayor tamaño
Dado que la aplicación incluye el entorno de ejecución de .NET y todas las dependencias de la aplicación, el tamaño de descarga y el espacio de disco duro necesario es mayor que una versión de dependiente del marco de. Sugerencia
Puede reducir el tamaño de la implementación en sistemas Linux en 28 MB aproximadamente con el modo invariable global de .NET. Esto obliga a la aplicación a tratar todas las culturas como la cultura invariable .
Sugerencia
El recorte de IL puede reducir aún más el tamaño de la implementación.
Más difícil de actualizar la versión de .NET
El entorno de ejecución de .NET (distribuido con la aplicación) solo se puede actualizar liberando una nueva versión de la aplicación.
Ejemplos
Publique una aplicación autocontenida. Se crea un archivo ejecutable de 64 bits de macOS.
dotnet publish -r osx-x64 --self-contained
Publique una aplicación autocontenida. Se crea un ejecutable de Windows de 64 bits.
dotnet publish -r win-x64 --self-contained
Publicar con imágenes ReadyToRun
La publicación con imágenes ReadyToRun mejora el tiempo de inicio de la aplicación a costa de aumentar el tamaño de la aplicación. Para obtener más información, vea ReadyToRun.
Ventajas
- Tiempo de inicio mejorado
La aplicación tarda menos tiempo en ejecutar el JIT.
Desventajas
- tamaño mayor
La aplicación ocupa más espacio en el disco.
Ejemplos
Publique una aplicación autocontenida y lista para ejecutar. Se crea un archivo ejecutable de 64 bits de macOS.
dotnet publish -c Release -r osx-x64 --self-contained -p:PublishReadyToRun=true
Publique una aplicación autocontenida y lista para ejecutar. Se crea un ejecutable de Windows de 64 bits.
dotnet publish -c Release -r win-x64 --self-contained -p:PublishReadyToRun=true