Selección entre .NET Core y .NET Framework para aplicaciones de servidorChoosing between .NET Core and .NET Framework for server apps

Existen dos implementaciones para crear aplicaciones del lado del servidor con .NET: .NET Framework y .NET Core.There are two supported implementations for building server-side applications with .NET: .NET Framework and .NET Core. Ambas comparten muchos de los mismos componentes y es posible compartir código entre ellas.Both share many of the same components and you can share code across the two. En cambio, presentan diferencias fundamentales y su elección depende de lo que quiera realizar.However, there are fundamental differences between the two and your choice depends on what you want to accomplish. En este artículo se proporcionan orientaciones sobre cuándo usar cada una.This article provides guidance on when to use each.

Use .NET Core para la aplicación de servidor cuando:Use .NET Core for your server application when:

  • Tenga necesidades multiplataforma.You have cross-platform needs.
  • Tenga como objetivo los microservicios.You are targeting microservices.
  • Vaya a usar contenedores de Docker.You are using Docker containers.
  • Necesite sistemas escalables y de alto rendimiento.You need high-performance and scalable systems.
  • Necesite versiones de .NET en paralelo por aplicación.You need side-by-side .NET versions per application.

Use .NET Framework para su aplicación de servidor cuando:Use .NET Framework for your server application when:

  • La aplicación use actualmente .NET Framework (la recomendación es extender en lugar de migrar).Your app currently uses .NET Framework (recommendation is to extend instead of migrating).
  • La aplicación use bibliotecas .NET de terceros o paquetes de NuGet que no están disponibles para .NET Core.Your app uses third-party .NET libraries or NuGet packages not available for .NET Core.
  • La aplicación use tecnologías de .NET que no están disponibles para .NET Core.Your app uses .NET technologies that aren't available for .NET Core.
  • La aplicación use una plataforma que no es compatible con .NET Core.Your app uses a platform that doesn’t support .NET Core.

Casos en los que elegir .NET CoreWhen to choose .NET Core

En las siguientes secciones, se explican de manera más detallada las razones indicadas anteriormente para elegir .NET Core.The following sections give a more detailed explanation of the previously stated reasons for picking .NET Core.

Necesidades multiplataformaCross-platform needs

Si la aplicación (web/servicio) tiene que ejecutarse en varias plataformas (Windows, Linux y macOS), use .NET Core.If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.

.NET Core admite los sistemas operativos mencionados anteriormente como estación de trabajo de desarrollo..NET Core supports the previously mentioned operating systems as your development workstation. Visual Studio proporciona un entorno de desarrollo integrado (IDE) para Windows y macOS.Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. También puede usar Visual Studio Code, que se ejecuta en macOS, Linux y Windows.You can also use Visual Studio Code, which runs on macOS, Linux, and Windows. Visual Studio Code es compatible con .NET Core, incluidos IntelliSense y la depuración.Visual Studio Code supports .NET Core, including IntelliSense and debugging. La mayoría de los editores de terceros, como Sublime, Emacs y VI, funcionan con .NET Core.Most third-party editors, such as Sublime, Emacs, and VI, work with .NET Core. Estos editores de terceros obtienen el editor de IntelliSense mediante Omnisharp.These third-party editors get editor IntelliSense using Omnisharp. También puede evitar el uso de un editor de código y usar directamente las herramientas de la interfaz de la línea de comandos de .NET Core, disponibles para todas las plataformas compatibles.You can also avoid any code editor and directly use the .NET Core CLI tools, available for all supported platforms.

Arquitectura de microserviciosMicroservices architecture

Una arquitectura de microservicios permite una combinación de tecnologías en un límite de servicio.A microservices architecture allows a mix of technologies across a service boundary. Esta combinación de tecnología permite un adopción gradual de .NET Core para microservicios nuevos que funcionan con otros servicios o microservicios.This technology mix enables a gradual embrace of .NET Core for new microservices that work with other microservices or services. Por ejemplo, puede combinar microservicios o servicios desarrollados con .NET Framework, Java, Ruby u otras tecnologías monolíticas.For example, you can mix microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.

Existen muchas plataformas de infraestructura.There are many infrastructure platforms available. Azure Service Fabric está diseñada para sistemas de microservicios grandes y complejos.Azure Service Fabric is designed for large and complex microservice systems. Azure App Service es una buena elección para microservicios sin estado.Azure App Service is a good choice for stateless microservices. Los microservicios alternativos basados en Docker encajan en cualquier enfoque de microservicios, como se explica en la sección Contenedores.Microservices alternatives based on Docker fit any kind of microservices approach, as explained in the Containers section. Todas estas plataformas admiten .NET Core, lo que hace que resulten perfectas para hospedar sus microservicios.All these platforms support .NET Core and make them ideal for hosting your microservices.

Para obtener más información sobre la arquitectura de microservicios, consulte .NET Microservices. Architecture for Containerized .NET Applications (Microservicios de .NET: Arquitectura para aplicaciones .NET en contenedor).For more information about microservices architecture, see .NET Microservices. Architecture for Containerized .NET Applications.

ContenedoresContainers

Los contenedores se usan normalmente junto con una arquitectura de microservicios.Containers are commonly used in conjunction with a microservices architecture. Los contenedores también se pueden usar para incluir las aplicaciones web o los servicios en contenedores que sigan cualquier patrón de arquitectura.Containers can also be used to containerize web apps or services that follow any architectural pattern. .NET Framework se puede usar en contenedores de Windows, la modularidad y ligereza de .NET Core la convierten en una mejor elección para los contenedores..NET Framework can be used on Windows containers, but the modularity and lightweight nature of .NET Core makes it a better choice for containers. Al crear e implementar un contenedor, el tamaño de su imagen es mucho más pequeño con .NET Core que con .NET Framework.When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. Como es multiplataforma, puede implementar aplicaciones de servidor en contenedores de Docker de Linux, por ejemplo.Because it's cross-platform, you can deploy server apps to Linux Docker containers, for example.

Los contenedores de Docker pueden hospedarse en su propia infraestructura de Linux o Windows, o en un servicio en la nube como Azure Container Service.Docker containers can be hosted in your own Linux or Windows infrastructure, or in a cloud service such as Azure Container Service. Azure Container Service puede administrar, organizar y escalar aplicaciones basadas en contenedores en la nube.Azure Container Service can manage, orchestrate, and scale container-based applications in the cloud.

Necesidad de sistemas escalables y de alto rendimientoA need for high-performance and scalable systems

Cuando el sistema necesite el mejor rendimiento y escalabilidad posible, .NET Core y ASP.NET Core son sus mejores opciones.When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options. El entorno de ejecución de servidor de alto rendimiento para Windows Server y Linux convierte .NET en un marco web de gran rendimiento en los bancos de pruebas de TechEmpower.High-performance server runtime for Windows Server and Linux makes .NET a top performing web framework on TechEmpower benchmarks.

El rendimiento y la escalabilidad son especialmente importantes para las arquitecturas de microservicios, donde podrían ejecutarse cientos de microservicios.Performance and scalability are especially relevant for microservices architectures, where hundreds of microservices may be running. Con ASP.NET Core, los sistemas se ejecutan con un número mucho menor de servidores/máquinas virtuales.With ASP.NET Core, systems run with a much lower number of servers/Virtual Machines (VM). Al usar menos servidores/máquinas virtuales, se ahorran costos de infraestructura y hospedaje.The reduced servers/VMs save costs in infrastructure and hosting.

Necesidad de versiones de .NET en paralelo por nivel de aplicaciónA need for side by side of .NET versions per application level

Para instalar aplicaciones con dependencias en diferentes versiones de .NET, se recomienda .NET Core.To install applications with dependencies on different versions of .NET, we recommend .NET Core. .NET Core ofrece una instalación en paralelo de diferentes versiones del entorno de ejecución .NET Core en el mismo equipo..NET Core offers side-by-side installation of different versions of the .NET Core runtime on the same machine. Esta instalación en paralelo permite varios servicios en el mismo servidor, cada uno de ellos en su propia versión de .NET Core.This side-by-side installation allows multiple services on the same server, each of them on its own version of .NET Core. También reduce los riesgos y ahorra dinero en las operaciones de TI y las actualizaciones de aplicaciones.It also lowers risks and saves money in application upgrades and IT operations.

Casos en los que elegir .NET FrameworkWhen to choose .NET Framework

.NET Core ofrece ventajas significativas para las aplicaciones nuevas y los patrones de aplicación..NET Core offers significant benefits for new applications and application patterns. En cambio, .NET Framework sigue siendo la opción natural para muchos escenarios existentes y, por ello,However, the .NET Framework continues to be the natural choice for many existing scenarios and as such. .NET Core no reemplaza a .NET Framework para todas las aplicaciones de servidor.The .NET Framework isn't replaced by .NET Core for all server applications.

Aplicaciones actuales de .NET FrameworkCurrent .NET Framework applications

En la mayoría de los casos, no necesita migrar sus aplicaciones existentes a .NET Core.In most cases, you don’t need to migrate your existing applications to .NET Core. En su lugar, un enfoque recomendado es usar .NET Core al extender una aplicación existente, como escribir un nuevo servicio web en ASP.NET Core.Instead, a recommended approach is to use .NET Core as you extend an existing application, such as writing a new web service in ASP.NET Core.

Necesidad de usar bibliotecas .NET de terceros o paquetes de NuGet que no están disponibles para .NET CoreA need to use third-party .NET libraries or NuGet packages not available for .NET Core

Las bibliotecas están adoptando rápidamente .NET Standard.Libraries are quickly embracing .NET Standard. .NET Standard permite compartir código entre todas las implementaciones de .NET, incluido .NET Core..NET Standard enables sharing code across all .NET implementations including .NET Core. Con .NET Standard 2.0, esto es incluso más fácil:With .NET Standard 2.0, this is even easier:

  • La superficie de API es mucho más grande.The API surface became much larger.
  • Se ha introducido un modo de compatibilidad de .NET Framework.Introduced a .NET Framework compatibility mode. Este modo de compatibilidad permite a los proyectos de .NET Standard o .NET Core hacer referencia a bibliotecas de .NET Framework.This compatibility mode allows .NET Standard/.NET Core projects to reference .NET Framework libraries. Para obtener más información sobre el modo de compatibilidad, vea Announcing .NET Standard 2.0 (Anuncio de .NET Standard 2.0).To learn more about the compatibility mode, see Announcing .NET Standard 2.0.

Por tanto, solo en casos en que las bibliotecas o paquetes de NuGet usen tecnologías que no están disponibles en .NET Standard o .NET Core, debe usar .NET Framework.So only in cases where the libraries or NuGet packages use technologies that aren't available in .NET Standard/.NET Core, you need to use the .NET Framework.

Necesidad de usar tecnologías de .NET que no están disponibles para .NET CoreA need to use .NET technologies not available for .NET Core

Algunas tecnologías de .NET Framework no están disponibles en .NET Core.Some .NET Framework technologies aren't available in .NET Core. Algunas de ellas puede que estén disponibles en versiones posteriores de .NET Core.Some of them might be available in later .NET Core releases. Otras no se aplican a los nuevos patrones de aplicaciones a los que se dirige .NET Core y puede que nunca estén disponibles.Others don’t apply to the new application patterns targeted by .NET Core and may never be available. En la siguiente lista, se muestran las tecnologías más comunes que no se encuentran en .NET Core:The following list shows the most common technologies not found in .NET Core:

  • Aplicaciones de ASP.NET Web Forms: ASP.NET Web Forms solo está disponible en .NET Framework.ASP.NET Web Forms applications: ASP.NET Web Forms are only available in the .NET Framework. No se puede usar ASP.NET Core para ASP.NET Web Forms.ASP.NET Core cannot be used for ASP.NET Web Forms. No está previsto migrar ASP.NET Web Forms a .NET Core.There are no plans to bring ASP.NET Web Forms to .NET Core.

  • Aplicaciones de ASP.NET Web Pages: ASP.NET Web Pages no está incluida en ASP.NET Core.ASP.NET Web Pages applications: ASP.NET Web Pages aren't included in ASP.NET Core. Las páginas de Razor de ASP.NET Core tienen muchas similitudes con Web Pages.ASP.NET Core Razor Pages have many similarities with Web Pages.

  • Implementación de servidor y cliente de ASP.NET SignalR.ASP.NET SignalR server/client implementation. En la actualidad ASP.NET SignalR está disponible en modo de versión preliminar con ASP.NET Core 2.1.Currently, ASP.NET SignalR is available in preview mode with ASP.NET Core 2.1.

  • Implementación de servicios WCF.WCF services implementation. Aunque hay una biblioteca cliente de WCF para consumir servicios WCF desde .NET Core, actualmente, la implementación del servidor WCF solo está disponible en .NET Framework.Even when there’s a WCF-Client library to consume WCF services from .NET Core, WCF server implementation is currently only available in the .NET Framework. Este escenario no es parte del plan actual de .NET Core, pero se está considerando para el futuro.This scenario is not part of the current plan for .NET Core but it’s being considered for the future.

  • Servicios relacionados con el flujo de trabajo: Windows Workflow Foundation (WF), Workflow Services (WCF + WF en un único servicio) y WCF Data Services (antes conocido como "ADO.NET Data Services") solo están disponibles en .NET Framework.Workflow-related services: Windows Workflow Foundation (WF), Workflow Services (WCF + WF in a single service) and WCF Data Services (formerly known as "ADO.NET Data Services") are only available in the .NET Framework. No está previsto migrar WF/WCF+WF/WCF Data Services a .NET Core.There are no plans to bring WF/WCF+WF/WCF Data Services to .NET Core.

  • Windows Presentation Foundation (WPF) y Windows Forms: las aplicaciones WPF y Windows Forms solo están disponibles en .NET Framework.Windows Presentation Foundation (WPF) and Windows Forms: WPF and Windows Forms applications are only available in the .NET Framework. No existen planes para migrarlas a .NET Core.There are no plans to port them to .NET Core.

  • Compatibilidad con lenguajes: Visual Basic y F# se admiten actualmente en .NET Core, pero no para todos los tipos de proyecto.Language support: Visual Basic and F# are currently supported in .NET Core, but not for all project types. Para obtener una lista de plantillas de proyecto compatibles, consulte Opciones de plantilla para dotnet new.For a list of supported project templates, see Template options for dotnet new.

Además del mapa de ruta oficial, hay otros marcos de trabajo para migrar a .NET Core.In addition to the official roadmap, there are other frameworks to be ported to .NET Core. Para obtener una lista completa, vea los problemas de CoreFX marcados como port-to-core.For a full list, see the CoreFX issues marked as port-to-core. Esta lista no representa un compromiso de Microsoft para migrar esos componentes a .NET Core.This list doesn’t represent a commitment from Microsoft to bring those components to .NET Core. Simplemente representa el deseo de la comunidad de hacerlo.They're simply capturing the desire from the community to do so. Si le preocupa cualquiera de los componentes marcados como port-to-core, participe en las discusiones en GitHub.If you care about any of the components marked as port-to-core, participate in the discussions on GitHub. Y, si piensa que falta algo, registre un nuevo problema en el repositorio de CoreFX.And if you think something is missing, file a new issue in the CoreFX repository.

Necesidad de usar una plataforma que no es compatible con .NET CoreA need to use a platform that doesn’t support .NET Core

Algunas plataformas de terceros o de Microsoft no son compatibles con .NET Core.Some Microsoft or third-party platforms don’t support .NET Core. Por ejemplo, algunos servicios de Azure, como Service Fabric Stateful Reliable Services y Service Fabric Reliable Actors requieren .NET Framework.For example, some Azure services such as Service Fabric Stateful Reliable Services and Service Fabric Reliable Actors require .NET Framework. Otros servicios proporcionan un SDK que aún no se encuentra disponible para consumo en .NET Core.Some other services provide an SDK not yet available for consumption on .NET Core. Esta es una circunstancia transitoria, dado que todos los servicios de Azure usan .NET Core.This is a transitional circumstance, as all of Azure services use .NET Core. Mientras tanto, siempre puede utilizar la API de REST equivalente en lugar del SDK de cliente.In the meantime, you can always use the equivalent REST API instead of the client SDK.

Vea tambiénSee also

Elegir entre ASP.NET y ASP.NET CoreChoose between ASP.NET and ASP.NET Core
Guía de .NET Core.NET Core Guide
Portabilidad de .NET Framework a .NET CorePorting from .NET Framework to .NET Core
Guía de .NET Framework en Docker.NET Framework on Docker Guide
Introducción a los componentes de .NET.NET Components Overview
.NET Microservices. Architecture for Containerized .NET Applications (Microservicios de .NET: Arquitectura para aplicaciones .NET en contenedor).NET Microservices. Architecture for Containerized .NET Applications