Información general sobre la publicación de aplicaciones de .NET Core.NET Core application publishing overview

Las aplicaciones que se crean con .NET Core se pueden publicar de dos modos diferentes, lo cual afecta a la forma en la que un usuario ejecuta la aplicación.Applications you create with .NET Core can be published in two different modes, and the mode affects how a user runs your app.

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 Core, así como la aplicación y sus dependencias.Publishing your app as self-contained produces an application that includes the .NET Core runtime and libraries, and your application and its dependencies. Los usuarios de la aplicación pueden ejecutarla en un equipo que no tenga instalado el entorno de ejecución de .NET Core.Users of the application can run it on a machine that doesn't have the .NET Core runtime installed.

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.Publishing your app as framework-dependent produces an application that includes only your application itself and its dependencies. Los usuarios de la aplicación tienen que instalar el entorno de ejecución de .NET Core por separado.Users of the application have to separately install the .NET Core runtime.

De forma predeterminada, ambos modos de publicación generan un archivo ejecutable específico de la plataforma.Both publishing modes produce a platform-specific executable by default. Las aplicaciones dependientes de la plataforma se pueden crear sin un archivo ejecutable y son multiplataforma.Framework-dependent applications can be created without an executable, and these applications are cross-platform.

Cuando se genera un archivo ejecutable, puede especificar la plataforma de destino con un identificador de entorno de ejecución (RID).When an executable is produced, you can specify the target platform with a runtime identifier (RID). Para obtener más información sobre los RID, vea el Catálogo de identificadores de entorno de ejecución (RID) de .NET Core.For more information about RIDs, see .NET Core RID Catalog.

En la tabla siguiente se describen los comandos que se usan para publicar una aplicación como dependiente de la plataforma o independiente según la versión del SDK:The following table outlines the commands used to publish an app as framework-dependent or self-contained, per SDK version:

TipoType SDK 2.1SDK 2.1 SDK 3.xSDK 3.x ComandoCommand
archivo ejecutable dependiente de la plataforma para la plataforma actual.framework-dependent executable for the current platform. ✔️✔️ dotnet publish
archivo ejecutable dependiente de la plataforma para una plataforma específica.framework-dependent executable for a specific platform. ✔️✔️ dotnet publish -r <RID> --self-contained false
archivo binario multiplataforma dependiente de la plataforma.framework-dependent cross-platform binary. ✔️✔️ ✔️✔️ dotnet publish
archivo ejecutable independienteself-contained executable. ✔️✔️ ✔️✔️ dotnet publish -r <RID>

Para obtener más información, vea el artículo sobre el comando dotnet publish de .NET Core.For more information, see .NET Core dotnet publish command.

Generación de un archivo ejecutableProduce an executable

Los archivos ejecutables no son multiplataforma.Executables aren't cross-platform. Son específicos de un sistema operativo y de la arquitectura de la CPU.They're specific to an operating system and CPU architecture. Al publicar la aplicación y crear un archivo ejecutable, puede publicarla como independiente o dependiente de la plataforma.When publishing your app and creating an executable, you can publish the app as self-contained or framework-dependent. La publicación de una aplicación como independiente incluye el entorno de ejecución de .NET Core con la aplicación, y los usuarios de la aplicación no tienen que preocuparse de instalar .NET Core antes de ejecutar la aplicación.Publishing an app as self-contained includes the .NET Core runtime with the app, and users of the app don't have to worry about installing .NET Core before running the app. Las aplicaciones publicadas como dependientes de la plataforma no incluyen el entorno de ejecución ni las bibliotecas de .NET Core; solo se incluyen la aplicación y las dependencias de terceros.Apps published as framework-dependent don't include the .NET Core runtime and libraries; only the app and 3rd-party dependencies are included.

Los siguientes comandos generan un archivo ejecutable:The following commands produce an executable:

TipoType SDK 2.1SDK 2.1 SDK 3.xSDK 3.x ComandoCommand
archivo ejecutable dependiente de la plataforma para la plataforma actual.framework-dependent executable for the current platform. ✔️✔️ dotnet publish
archivo ejecutable dependiente de la plataforma para una plataforma específica.framework-dependent executable for a specific platform. ✔️✔️ dotnet publish -r <RID> --self-contained false
archivo ejecutable independienteself-contained executable. ✔️✔️ ✔️✔️ dotnet publish -r <RID>

Generación de un archivo binario multiplataformaProduce a cross-platform binary

Los archivos binarios multiplataforma se crean al publicar la aplicación como dependiente de la plataforma en forma de un archivo .dll.Cross-platform binaries are created when you publish your app as framework-dependent, in the form of a dll file. El archivo .dll tiene el nombre del proyecto.The dll file is named after your project. Por ejemplo, si tiene una aplicación denominada lector_de_palabras, se creará un archivo denominado lector_de_palabras.dll.For example, if you have an app named word_reader, a file named word_reader.dll is created. Las aplicaciones publicadas de este modo se ejecutan con el comando dotnet <filename.dll> y se pueden ejecutar en cualquier plataforma.Apps published in this way are run with the dotnet <filename.dll> command and can be run on any platform.

Los archivos binarios multiplataforma se pueden ejecutar en cualquier sistema operativo siempre que ya esté instalado el entorno de ejecución de .NET Core de destino.Cross-platform binaries can be run on any operating system as long as the targeted .NET Core runtime is already installed. Si el entorno de ejecución de .NET Core de destino no está instalado, la aplicación puede ejecutarse con un entorno de ejecución más reciente a condición de que la aplicación esté configurada para la puesta al día.If the targeted .NET Core runtime isn't installed, the app may run using a newer runtime if the app is configured to roll-forward. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.For more information, see framework-dependent apps roll forward.

El siguiente comando genera un archivo binario multiplataforma:The following command produces a cross-platform binary:

TipoType SDK 2.1SDK 2.1 SDK 3.xSDK 3.x ComandoCommand
archivo binario multiplataforma dependiente de la plataforma.framework-dependent cross-platform binary. ✔️✔️ ✔️✔️ dotnet publish

Publicación como dependiente de la plataformaPublish framework-dependent

Las aplicaciones publicadas como dependientes de la plataforma son multiplataforma y no incluyen el entorno de ejecución de .NET Core.Apps published as framework-dependent are cross-platform and don't include the .NET Core runtime. El usuario de la aplicación debe instalar el entorno de ejecución de .NET Core.The user of your app is required to install the .NET Core runtime.

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.Publishing an app as framework-dependent produces a cross-platform binary as a dll file, and a platform-specific executable that targets your current platform. El archivo .dll es multiplataforma, pero el ejecutable no lo es.The dll is cross-platform while the executable isn't. Por ejemplo, si publica una aplicación denominada lector_de_palabras y el destino es Windows, se creará un archivo ejecutable lector_de_palabras.exe junto con lector_de_palabras.dll.For example, if you publish an app named word_reader and target Windows, a word_reader.exe executable is created along with word_reader.dll. Si el destino es Linux o macOS, se creará un archivo ejecutable lector_de_palabras junto con lector_de_palabras.dll.When targeting Linux or macOS, a word_reader executable is created along with word_reader.dll. Para obtener más información sobre los RID, vea el Catálogo de identificadores de entorno de ejecución (RID) de .NET Core.For more information about RIDs, see .NET Core RID Catalog.

Importante

El SDK 2.1 de .NET Core no genera archivos ejecutables específicos de la plataforma al publicar una aplicación dependiente de la plataforma..NET Core SDK 2.1 doesn't produce platform-specific executables when you publish an app framework-dependent.

El archivo binario multiplataforma de la aplicación se puede ejecutar con el comando dotnet <filename.dll> en cualquier plataforma.The cross-platform binary of your app can be run with the dotnet <filename.dll> command, and can be run on any platform. Si la aplicación usa un paquete NuGet que tenga implementaciones específicas de la plataforma, se copiarán todas las dependencias de la plataforma en la carpeta de publicación junto con la aplicación.If the app uses a NuGet package that has platform-specific implementations, all platforms' dependencies are copied to the publish folder along with the app.

Puede crear un archivo ejecutable para una plataforma específica pasando los parámetros -r <RID> --self-contained false al comando dotnet publish.You can create an executable for a specific platform by passing the -r <RID> --self-contained false parameters to the dotnet publish command. Si se omite el parámetro -r, se creará un archivo ejecutable para la plataforma actual.When the -r parameter is omitted, an executable is created for your current platform. Los paquetes NuGet que tengan dependencias específicas de la plataforma para la plataforma de destino se copiarán en la carpeta de publicación.Any NuGet packages that have platform-specific dependencies for the targeted platform are copied to the publish folder.

VentajasAdvantages

  • Implementación de pequeño tamañoSmall deployment
    En este caso solo se distribuyen la aplicación y sus dependencias.Only your app and its dependencies are distributed. El usuario instala el entorno de ejecución y las bibliotecas de .NET Core, y todas las aplicaciones comparten ese entorno de ejecución.The .NET Core runtime and libraries are installed by the user and all apps share the runtime.

  • MultiplataformaCross-platform
    La aplicación y cualquier biblioteca basada en .NET se ejecuta en otros sistemas operativos.Your app and any .NET-based library runs on other operating systems. No necesita definir una plataforma de destino para la aplicación.You don't need to define a target platform for your app. Para obtener más información sobre el formato de archivo de .NET, consulte Formato de archivo de ensamblado .NET.For information about the .NET file format, see .NET Assembly File Format.

  • Uso del entorno de ejecución revisado más recienteUses the latest patched runtime
    La aplicación usa el entorno de ejecución más reciente (dentro de la familia principal y secundaria de .NET Core de destino) instalada en el sistema de destino.The app uses the latest runtime (within the targeted major-minor family of .NET Core) installed on the target system. De esta forma, la aplicación utilizará automáticamente la versión revisada más reciente del entorno de ejecución de .NET Core.This means your app automatically uses the latest patched version of the .NET Core runtime. Este comportamiento predeterminado se puede anular.This default behavior can be overridden. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.For more information, see framework-dependent apps roll forward.

DesventajasDisadvantages

  • Preinstalación necesaria del entorno de ejecuciónRequires pre-installing the runtime
    Su aplicación solo se puede ejecutar si la versión de .NET Core de destino de la aplicación ya está instalada en el sistema host.Your app can run only if the version of .NET Core your app targets is already installed on the host system. Puede configurar el comportamiento de puesta al día para que la aplicación requiera una versión específica de .NET Core o permita el uso de una versión más reciente de .NET Core.You can configure roll-forward behavior for the app to either require a specific version of .NET Core or allow a newer version of .NET Core. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.For more information, see framework-dependent apps roll forward.

  • Cambios posibles de .NET Core.NET Core may change
    Es posible actualizar el entorno de ejecución y las bibliotecas de .NET Core en el equipo donde se ejecuta la aplicación.It's possible for the .NET Core runtime and libraries to be updated on the machine where the app is run. En raras ocasiones, esto puede cambiar el comportamiento de la aplicación si usa las bibliotecas de .NET Core, lo que sucede con la mayoría de las aplicaciones.In rare cases, this may change the behavior of your app if you use the .NET Core libraries, which most apps do. Puede configurar de qué modo la aplicación usa versiones más recientes de .NET Core.You can configure how your app uses newer versions of .NET Core. Para más información, consulte Puesta al día de las aplicaciones dependientes de la plataforma.For more information, see framework-dependent apps roll forward.

La desventaja siguiente solo se aplica al SDK 2.1 de .NET Core.The following disadvantage only applies to .NET Core 2.1 SDK.

  • Uso del comando dotnet para iniciar la aplicaciónUse the dotnet command to start the app
    Los usuarios deben ejecutar el comando dotnet <filename.dll> para iniciar la aplicación.Users must run the dotnet <filename.dll> command to start your app. El SDK 2.1 de .NET Core no genera archivos ejecutables específicos de la plataforma para las aplicaciones que se publiquen como dependientes de la plataforma..NET Core 2.1 SDK doesn't produce platform-specific executables for apps published framework-dependent.

EjemplosExamples

Sirve para publicar una aplicación multiplataforma dependiente de la plataforma.Publish an app cross-platform framework-dependent. Se creará un archivo ejecutable que tendrá como destino la plataforma actual junto con el archivo .dll.An executable that targets your current platform is created along with the dll file.

dotnet publish

Sirve para publicar una aplicación multiplataforma dependiente de la plataforma.Publish an app cross-platform framework-dependent. Se creará un ejecutable de 64 bits de Linux junto con el archivo .dll.A Linux 64-bit executable is created along with the dll file. Este comando no funciona con .NET Core SDK 2.1.This command doesn't work with .NET Core SDK 2.1.

dotnet publish -r linux-x64 --self-contained false

Publicación como independientePublish self-contained

La publicación de la aplicación como independiente genera un archivo ejecutable específico de la plataforma.Publishing your app as self-contained produces a platform-specific executable. La carpeta de publicación de salida contiene todos los componentes de la aplicación, incluidas las bibliotecas y el entorno de ejecución de destino de .NET Core.The output publishing folder contains all components of the app, including the .NET Core libraries and target runtime. La aplicación está aislada de otras aplicaciones de .NET Core y no usa un entorno de ejecución compartido instalado localmente.The app is isolated from other .NET Core apps and doesn't use a locally installed shared runtime. No es necesario que el usuario de la aplicación descargue e instale .NET Core.The user of your app isn't required to download and install .NET Core.

El archivo binario ejecutable se genera para la plataforma de destino especificada.The executable binary is produced for the specified target platform. Por ejemplo, si tiene una aplicación denominada lector_de_palabras y publica un archivo ejecutable independiente para Windows, se creará el archivo lector_de_palabras.exe.For example, if you have an app named word_reader, and you publish a self-contained executable for Windows, a word_reader.exe file is created. Si se publica para Linux o macOS, se creará el archivo lector_de_palabras.Publishing for Linux or macOS, a word_reader file is created. La plataforma y la arquitectura de destino se especifican con el parámetro -r <RID> para el comando dotnet publish.The target platform and architecture is specified with the -r <RID> parameter for the dotnet publish command. Para obtener más información sobre los RID, vea el Catálogo de identificadores de entorno de ejecución (RID) de .NET Core.For more information about RIDs, see .NET Core RID Catalog.

Si la aplicación tiene dependencias específicas de la plataforma, como un paquete NuGet que contenga tales dependencias, se copiarán en la carpeta de publicación junto con la aplicación.If the app has platform-specific dependencies, such as a NuGet package containing platform-specific dependencies, these are copied to the publish folder along with the app.

VentajasAdvantages

  • Control de la versión de .NET CoreControl .NET Core version
    Puede controlar qué versión de .NET Core se implementa con la aplicación.You control which version of .NET Core is deployed with your app.

  • Destinatarios específicos de la plataformaPlatform-specific targeting
    Como tiene que publicar la aplicación para cada plataforma, sabe dónde se ejecutará.Because you have to publish your app for each platform, you know where your app will run. Si .NET Core introduce una nueva plataforma, los usuarios no podrán ejecutar la aplicación en ella hasta que publique una versión que tenga esa plataforma como destino.If .NET Core introduces a new platform, users can't run your app on that platform until you release a version targeting that platform. Puede probar la aplicación para buscar problemas de compatibilidad antes de que los usuarios la ejecuten en la nueva plataforma.You can test your app for compatibility problems before your users run your app on the new platform.

DesventajasDisadvantages

  • Implementaciones de mayor tamañoLarger deployments
    Dado que la aplicación incluye el entorno de ejecución de .NET Core y todas las dependencias de la aplicación, el tamaño de descarga y el espacio de disco duro necesario es mayor que en el caso de una versión dependiente de la plataforma.Because your app includes the .NET Core runtime and all of your app dependencies, the download size and hard drive space required is greater than a framework-dependent version.

    Sugerencia

    Puede reducir el tamaño de la implementación en sistemas Linux en 28 MB aproximadamente con el modo invariable global de .NET Core.You can reduce the size of your deployment on Linux systems by approximately 28 MB by using .NET Core globalization invariant mode. Esto obliga a la aplicación a tratar todas las referencias culturales como la referencia cultural invariable.This forces your app to treat all cultures like the invariant culture.

    Sugerencia

    Hay una característica de recorte en versión preliminar que puede ayudar a reducir todavía más el tamaño de su desarrollo.There is a preview Trim feature that can further reduce the size of your deployment.

  • Mayor dificultad para actualizar la versión de .NET CoreHarder to update the .NET Core version
    El entorno de ejecución de .NET Core (distribuido con la aplicación) solo se puede actualizar mediante la publicación de una nueva versión de la aplicación..NET Core Runtime (distributed with your app) can only be upgraded by releasing a new version of your app. Sin embargo, .NET Core actualizará las revisiones de seguridad críticas según sea necesario para la biblioteca de marcos en la máquina en la que se ejecuta la aplicación.However, .NET Core will update critical security patches as needed for the framework library in the machine that your app runs on. Usted es responsable de la validación de un extremo a otro del escenario de esta revisión de seguridad.You are responsible for end to end validation for this security patch scenario.

EjemplosExamples

Sirve para publicar una aplicación independiente.Publish an app self-contained. Se creará un archivo ejecutable de macOS de 64 bits.A macOS 64-bit executable is created.

dotnet publish -r osx-x64

Sirve para publicar una aplicación independiente.Publish an app self-contained. Se creará un archivo ejecutable de Windows de 64 bits.A Windows 64-bit executable is created.

dotnet publish -r win-x64

Publicar con imágenes ReadyToRunPublish with ReadyToRun images

La publicación con imágenes ReadyToRun mejorará el tiempo de inicio de la aplicación, a costa de aumentar el tamaño de la aplicación.Publishing with ReadyToRun images will improve the startup time of your application at the cost of increasing the size of your application. Para publicar con ReadyToRun, consulte ReadyToRun para obtener más información.In order to publish with ReadyToRun see ReadyToRun for more details.

VentajasAdvantages

  • Tiempo de inicio mejoradoImproved startup time
    La aplicación pasará menos tiempo ejecutando el JIT.The application will spend less time running the JIT.

InconvenientesDisadvantages

  • Mayor tamañoLarger size
    La aplicación será más grande en el disco.The application will be larger on disk.

EjemplosExamples

Publique una aplicación independiente y ReadyToRun.Publish an app self-contained and ReadyToRun. Se creará un archivo ejecutable de macOS de 64 bits.A macOS 64-bit executable is created.

dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true

Publique una aplicación independiente y ReadyToRun.Publish an app self-contained and ReadyToRun. Se creará un archivo ejecutable de Windows de 64 bits.A Windows 64-bit executable is created.

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

Vea tambiénSee also