Escolhendo entre o .NET Core e .NET Framework para aplicativos de servidorChoosing between .NET Core and .NET Framework for server apps

Há duas implementações com suporte para a compilação de aplicativos de servidor com o .NET: .NET Framework e .NET Core.There are two supported implementations for building server-side applications with .NET: .NET Framework and .NET Core. Ambas compartilham muitos dos mesmos componentes e você pode compartilhar código entre as duas.Both share many of the same components and you can share code across the two. No entanto, há diferenças fundamentais entre as duas e sua escolha depende do que você deseja realizar.However, there are fundamental differences between the two and your choice depends on what you want to accomplish. Este artigo fornece diretrizes sobre quando usar cada uma.This article provides guidance on when to use each.

Use o .NET Core para o aplicativo para servidores se:Use .NET Core for your server application when:

  • Você tiver necessidades de plataforma cruzada.You have cross-platform needs.
  • Você estiver direcionando microsserviços.You are targeting microservices.
  • Você estiver usando contêineres do Docker.You are using Docker containers.
  • Você precisar de alto desempenho e sistemas escalonáveis.You need high-performance and scalable systems.
  • Você precisar de versões do .NET correspondentes a cada aplicativo.You need side-by-side .NET versions per application.

Use o .NET Framework para o aplicativo para servidores se:Use .NET Framework for your server application when:

  • Seu aplicativo usar o .NET Framework atualmente (a recomendação é estender em vez de migrar).Your app currently uses .NET Framework (recommendation is to extend instead of migrating).
  • Seu aplicativo usa bibliotecas .NET de terceiros ou pacotes NuGet não disponíveis para o .NET Core.Your app uses third-party .NET libraries or NuGet packages not available for .NET Core.
  • Seu aplicativo usa tecnologias .NET que não estão disponíveis para o .NET Core.Your app uses .NET technologies that aren't available for .NET Core.
  • Seu aplicativo usa uma plataforma que não oferece suporte ao .NET Core.Your app uses a platform that doesn’t support .NET Core.

Quando escolher o .NET CoreWhen to choose .NET Core

As seguintes seções oferecem uma explicação mais detalhada sobre os motivos para escolher o .NET Core mencionados anteriormente.The following sections give a more detailed explanation of the previously stated reasons for picking .NET Core.

Necessidades de plataforma cruzadaCross-platform needs

Se seu aplicativo (web/serviço) precisa ser executado em várias plataformas (Windows, Linux e macOS), use o .NET Core.If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.

O .NET Core dá suporte aos sistemas operacionais mencionados anteriormente como sua estação de trabalho de desenvolvimento..NET Core supports the previously mentioned operating systems as your development workstation. O Visual Studio fornece um IDE (ambiente de desenvolvimento integrado) para Windows e macOS.Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. Você também pode usar o Visual Studio Code, que é executado no Windows, Linux e macOS.You can also use Visual Studio Code, which runs on macOS, Linux, and Windows. O Visual Studio Code dá suporte ao .NET Core, incluindo IntelliSense e depuração.Visual Studio Code supports .NET Core, including IntelliSense and debugging. A maioria dos editores de terceiros, como Sublime, Emacs e VI, trabalham com o .NET Core.Most third-party editors, such as Sublime, Emacs, and VI, work with .NET Core. Esses editores de terceiros obtém o IntelliSense do editor usando o Omnisharp.These third-party editors get editor IntelliSense using Omnisharp. Também é possível evitar o uso de editores de código e usar diretamente as ferramentas de CLI do .NET Core, disponíveis para todas as plataformas com suporte.You can also avoid any code editor and directly use the .NET Core CLI tools, available for all supported platforms.

Arquitetura de microsserviçosMicroservices architecture

Uma arquitetura de microsserviços possibilita uma combinação de tecnologias em um limite de serviço.A microservices architecture allows a mix of technologies across a service boundary. Essa combinação de tecnologias permite uma adoção gradual do .NET Core para novos microsserviços que funcionam com outros serviços ou microsserviços.This technology mix enables a gradual embrace of .NET Core for new microservices that work with other microservices or services. Por exemplo, você pode combinar microsserviços ou serviços desenvolvidos com .NET Framework, Java, Ruby ou outras tecnologias monolíticas.For example, you can mix microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.

Há muitas plataformas de infraestrutura disponíveis.There are many infrastructure platforms available. O Azure Service Fabric é criado para sistemas de microsserviço grandes e complexos.Azure Service Fabric is designed for large and complex microservice systems. O Serviço de Aplicativo do Azure é uma boa escolha para microsserviços sem monitoração de estado.Azure App Service is a good choice for stateless microservices. Alternativas de microsserviços baseadas em Docker se adaptam a qualquer tipo de abordagem de microsserviços, conforme explicado na seção Contêineres.Microservices alternatives based on Docker fit any kind of microservices approach, as explained in the Containers section. Todas essas plataformas oferecem suporte ao .NET Core e são ideais para hospedar microsserviços.All these platforms support .NET Core and make them ideal for hosting your microservices.

Para obter mais informações sobre a arquitetura de microsserviços, consulte Microsserviços do .NET. Arquitetura para aplicativos .NET em contêineres.For more information about microservices architecture, see .NET Microservices. Architecture for Containerized .NET Applications.

ContêineresContainers

Os contêineres são frequentemente usados em conjunto com uma arquitetura de microsserviços.Containers are commonly used in conjunction with a microservices architecture. Os contêineres também podem ser usados para colocar em contêiner os aplicativos ou serviços Web que seguem qualquer padrão de arquitetura.Containers can also be used to containerize web apps or services that follow any architectural pattern. O .NET Framework pode ser usado em contêineres do Windows, mas a modularidade e a natureza leve do .NET Core o tornam uma opção melhor para contêineres..NET Framework can be used on Windows containers, but the modularity and lightweight nature of .NET Core makes it a better choice for containers. Ao criar e implantar um contêiner, o tamanho de sua imagem será muito menor com o .NET Core que com o .NET Framework.When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. Como ele é multiplataforma, é possível implantar aplicativos para servidores em contêineres do Docker do Linux, por exemplo.Because it's cross-platform, you can deploy server apps to Linux Docker containers, for example.

Os contêineres do Docker podem ser hospedados em sua própria infraestrutura do Windows ou do Linux ou em um serviço de nuvem, como o Serviço de Kubernetes do Azure.Docker containers can be hosted in your own Linux or Windows infrastructure, or in a cloud service such as Azure Kubernetes Service. O Serviço de Kubernetes do Azure pode gerenciar, orquestrar e dimensionar aplicativos baseados em contêiner na nuvem.Azure Kubernetes Service can manage, orchestrate, and scale container-based applications in the cloud.

Uma necessidade de alto desempenho e sistemas escalonáveisA need for high-performance and scalable systems

Quando o seu sistema precisa do melhor desempenho e escalabilidade possíveis, o .NET Core e o ASP.NET Core são as melhores opções.When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options. O tempo de execução do servidor de alto desempenho para Windows Server e Linux tornam o .NET uma estrutura da Web de desempenho superior nas avaliações da TechEmpower.High-performance server runtime for Windows Server and Linux makes .NET a top performing web framework on TechEmpower benchmarks.

O desempenho e a escalabilidade são especialmente relevantes para arquiteturas de microsserviços, nas quais centenas de microsserviços podem estar em execução.Performance and scalability are especially relevant for microservices architectures, where hundreds of microservices may be running. Com o ASP.NET Core, os sistemas são executados com um número bem menor de servidores/VMs (Máquinas Virtuais).With ASP.NET Core, systems run with a much lower number of servers/Virtual Machines (VM). A redução em servidores/VMs gera economia em infraestrutura e hospedagem.The reduced servers/VMs save costs in infrastructure and hosting.

Necessidade de lado a lado de versões do .NET por nível de aplicativoA need for side by side of .NET versions per application level

Para instalar aplicativos com dependências em diferentes versões do .NET, é recomendável o .NET Core.To install applications with dependencies on different versions of .NET, we recommend .NET Core. O .NET core oferece instalação lado a lado de versões diferentes do tempo de execução do .NET Core no mesmo computador..NET Core offers side-by-side installation of different versions of the .NET Core runtime on the same machine. Essa instalação lado a lado permite vários serviços no mesmo servidor, cada um em sua própria versão do .NET Core.This side-by-side installation allows multiple services on the same server, each of them on its own version of .NET Core. Ela também reduz os riscos e gera economia financeira nas operações de TI e atualizações de aplicativo.It also lowers risks and saves money in application upgrades and IT operations.

Quando escolher o .NET FrameworkWhen to choose .NET Framework

O .NET Core oferece benefícios significativos para novos aplicativos e padrões de aplicativo..NET Core offers significant benefits for new applications and application patterns. No entanto, o .NET Framework continua sendo a escolha natural para muitos cenários existentes e, portanto, não é substituído pelo .NET Core em todos os aplicativos para servidores.However, the .NET Framework continues to be the natural choice for many existing scenarios and as such the .NET Framework isn't replaced by .NET Core for all server applications.

Aplicativos .NET Framework atuaisCurrent .NET Framework applications

Na maioria dos casos, não é necessário migrar aplicativos existentes para o .NET Core.In most cases, you don’t need to migrate your existing applications to .NET Core. Em vez disso, uma abordagem recomendada é usar o .NET Core ao estender um aplicativo existente, por exemplo, para gravar um novo serviço Web no 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.

Necessidade de usar bibliotecas .NET de terceiros ou pacotes NuGet não disponíveis para o .NET CoreA need to use third-party .NET libraries or NuGet packages not available for .NET Core

As bibliotecas estão rapidamente adotando o .NET Standard.Libraries are quickly embracing .NET Standard. O .NET Standard permite o compartilhamento de código entre todas as implementações do .NET, incluindo o .NET Core..NET Standard enables sharing code across all .NET implementations including .NET Core. Com o .NET Standard 2.0, isso é ainda mais fácil:With .NET Standard 2.0, this is even easier:

  • A superfície de API se tornou muito maior.The API surface became much larger.
  • Foi introduzido um modo de compatibilidade do .NET Framework.Introduced a .NET Framework compatibility mode. Este modo de compatibilidade permite que os projetos do .NET Standard/.NET Core referenciem bibliotecas do .NET Framework.This compatibility mode allows .NET Standard/.NET Core projects to reference .NET Framework libraries. Para saber mais sobre o modo de compatibilidade, consulte o Comunicado do .NET Standard 2.0.To learn more about the compatibility mode, see Announcing .NET Standard 2.0.

Portanto, apenas nos casos em que as bibliotecas ou pacotes NuGet usarem tecnologias que não estão disponíveis no .NET Standard/.NET Core, você precisará usar o .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.

Necessidade de usar as tecnologias do .NET que não estão disponíveis para .NET CoreA need to use .NET technologies not available for .NET Core

Algumas tecnologias do .NET Framework não estão disponíveis no .NET Core.Some .NET Framework technologies aren't available in .NET Core. Algumas delas poderão ser disponibilizadas em versões posteriores do .NET Core.Some of them might be available in later .NET Core releases. Outras não se aplicam aos novos padrões de aplicativo direcionados pelo .NET Core e podem não ser mais disponibilizadas.Others don’t apply to the new application patterns targeted by .NET Core and may never be available. A lista a seguir mostra as tecnologias mais comuns não encontradas no .NET Core:The following list shows the most common technologies not found in .NET Core:

  • Aplicativos Web Forms do ASP.NET: O Web Forms do ASP.NET só está disponível no .NET Framework.ASP.NET Web Forms applications: ASP.NET Web Forms are only available in the .NET Framework. O ASP.NET Core não pode ser usado para Web Forms do ASP.NET.ASP.NET Core cannot be used for ASP.NET Web Forms. Não há planos para trazer os Web Forms do ASP.NET para o .NET Core.There are no plans to bring ASP.NET Web Forms to .NET Core.

  • Aplicativos de Páginas da Web do ASP.NET: As Páginas da Web do ASP.NET não estão incluídas no ASP.NET Core.ASP.NET Web Pages applications: ASP.NET Web Pages aren't included in ASP.NET Core.

  • Implementação de serviços do WCF.WCF services implementation. Mesmo que haja uma Biblioteca de Cliente WCF para consumir serviços WCF no .NET Core, a implementação de servidor do WCF só está disponível no .NET Framework no momento.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. Esse cenário não é parte do plano atual para o .NET Core, mas ele está sendo considerado para o futuro.This scenario is not part of the current plan for .NET Core but it’s being considered for the future.

  • Serviços relacionados ao fluxo de trabalho: O Windows WF (Workflow Foundation), os Serviços de Fluxo de Trabalho (WCF + WF em um único serviço) e o WCF Data Services (anteriormente conhecido como "ADO.NET Data Services") só estão disponíveis no .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. Não há planos para trazer WF/WCF+WF/WCF Data Services para o .NET Core.There are no plans to bring WF/WCF+WF/WCF Data Services to .NET Core.

  • Suporte de linguagem: Atualmente, há suporte para Visual Basic e F# no .NET Core, mas não para todos os tipos de projeto.Language support: Visual Basic and F# are currently supported in .NET Core, but not for all project types. Para obter uma lista de modelos de projeto com suporte, consulte Opções de modelo para o dotnet new.For a list of supported project templates, see Template options for dotnet new.

Além do roteiro oficial, há outras estruturas a serem transferidas para o .NET Core.In addition to the official roadmap, there are other frameworks to be ported to .NET Core. Para obter uma lista completa, consulte os problemas de CoreFX marcados como port-to-core.For a full list, see the CoreFX issues marked as port-to-core. Essa lista não representa um compromisso da Microsoft para levar esses componentes para o .NET Core.This list doesn’t represent a commitment from Microsoft to bring those components to .NET Core. Ela simplesmente captura o desejo da comunidade para que isso seja feito.They're simply capturing the desire from the community to do so. Se você se importa com qualquer um dos componentes marcados como port-to-core, participe das discussões no GitHub.If you care about any of the components marked as port-to-core, participate in the discussions on GitHub. E se você acha que algo está faltando, envie uma nova questão no repositório do CoreFX.And if you think something is missing, file a new issue in the CoreFX repository.

Necessidade de usar uma plataforma que não oferece suporte a .NET CoreA need to use a platform that doesn’t support .NET Core

Algumas plataformas de terceiros ou da Microsoft não oferecem suporte a .NET Core.Some Microsoft or third-party platforms don’t support .NET Core. Alguns serviços do Azure fornecem um SDK que ainda não está disponível para ser consumido no .NET Core.Some Azure services provide an SDK not yet available for consumption on .NET Core. Esta é uma circunstância transitória, pois todos os serviços do Azure usam o .NET Core.This is a transitional circumstance, as all of Azure services use .NET Core. Enquanto isso, você sempre pode usar a API REST equivalente em vez do SDK do cliente.In the meantime, you can always use the equivalent REST API instead of the client SDK.

Consulte tambémSee also