Choix entre .NET Core et .NET Framework pour les applications serveurChoosing between .NET Core and .NET Framework for server apps

Il existe deux implémentations pour générer des applications serveur avec .NET : .NET Framework et .NET Core.There are two supported implementations for building server-side applications with .NET: .NET Framework and .NET Core. Toutes deux partagent de nombreux composants et vous permettent de partager du code entre les deux.Both share many of the same components and you can share code across the two. Toutefois, il existe des différences fondamentales entre les deux et votre choix dépend de ce que vous souhaitez accomplir.However, there are fundamental differences between the two and your choice depends on what you want to accomplish. Cet article fournit des conseils sur l’utilisation de chacune.This article provides guidance on when to use each.

Utilisez .NET Core pour votre application serveur quand :Use .NET Core for your server application when:

  • vous avez des besoins multiplateformes ;You have cross-platform needs.
  • vous ciblez des microservices ;You are targeting microservices.
  • vous utilisez des conteneurs Docker ;You are using Docker containers.
  • Vous avez besoin de systèmes scalables et hautes performances.You need high-performance and scalable systems.
  • Vous avez besoin de versions .NET côte à côte par application.You need side-by-side .NET versions per application.

Utilisez .NET Framework pour votre application serveur quand :Use .NET Framework for your server application when:

  • Votre application utilise le .NET Framework (nous vous recommandons de privilégier l’extension à la migration).Your app currently uses .NET Framework (recommendation is to extend instead of migrating).
  • Votre application utilise des packages NuGet ou des bibliothèques .NET tiers non disponibles pour .NET Core.Your app uses third-party .NET libraries or NuGet packages not available for .NET Core.
  • Votre application utilise des technologies .NET non disponibles pour .NET Core.Your app uses .NET technologies that aren't available for .NET Core.
  • Votre application utilise une plateforme qui ne prend pas en charge .NET Core.Your app uses a platform that doesn’t support .NET Core.

Quand choisir .NET CoreWhen to choose .NET Core

Les sections suivantes donnent une explication plus détaillée des raisons indiquées précédemment justifiant le choix de .NET Core.The following sections give a more detailed explanation of the previously stated reasons for picking .NET Core.

Besoins multiplateformesCross-platform needs

Si votre application (web/service) doit s’exécuter sur plusieurs plateformes (Windows, Linux et macOS), utilisez .NET Core.If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.

.NET Core prend en charge les systèmes d’exploitation précédemment mentionnés comme station de travail de développement..NET Core supports the previously mentioned operating systems as your development workstation. Visual Studio fournit un environnement de développement intégré (IDE) pour Windows et macOS.Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. Vous pouvez également utiliser Visual Studio Code, qui s’exécute sur macOS, Linux et Windows.You can also use Visual Studio Code, which runs on macOS, Linux, and Windows. Visual Studio Code prend en charge .NET Core, notamment IntelliSense et le débogage.Visual Studio Code supports .NET Core, including IntelliSense and debugging. La plupart des éditeurs tiers, tels que Sublime, Emacs et VI, fonctionnent avec .NET Core.Most third-party editors, such as Sublime, Emacs, and VI, work with .NET Core. Ces éditeurs tiers obtiennent l’éditeur IntelliSense en utilisant Omnisharp.These third-party editors get editor IntelliSense using Omnisharp. Vous pouvez aussi vous affranchir des éditeurs de code et utiliser directement les outils CLI .NET Core, disponibles pour toutes les plateformes prises en charge.You can also avoid any code editor and directly use the .NET Core CLI tools, available for all supported platforms.

Architecture en microservicesMicroservices architecture

Une architecture en microservices permet une combinaison de technologies au-delà des limites d’un service.A microservices architecture allows a mix of technologies across a service boundary. Cette combinaison de technologies favorise l’adoption progressive de .NET Core pour les nouveaux microservices qui utilisent d’autres microservices ou services.This technology mix enables a gradual embrace of .NET Core for new microservices that work with other microservices or services. Par exemple, vous pouvez combiner des microservices ou services développés avec .NET Framework, Java, Ruby ou d’autres technologies monolithiques.For example, you can mix microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.

Il existe de nombreuses plateformes d’infrastructure.There are many infrastructure platforms available. Azure Service Fabric est conçu pour les systèmes de microservice volumineux et complexes.Azure Service Fabric is designed for large and complex microservice systems. Azure App Service est un bon choix pour les microservices sans état.Azure App Service is a good choice for stateless microservices. Les alternatives aux microservices basées sur Docker s’intègrent à tout type d’approche des microservices, comme expliqué dans la section Conteneurs.Microservices alternatives based on Docker fit any kind of microservices approach, as explained in the Containers section. Toutes ces plateformes prennent en charge .NET Core et s’avèrent idéales pour l’hébergement de vos microservices.All these platforms support .NET Core and make them ideal for hosting your microservices.

Pour plus d’informations sur l’architecture en microservices, consultez Microservices .NET. Architecture pour les applications .NET en conteneurs.For more information about microservices architecture, see .NET Microservices. Architecture for Containerized .NET Applications.

ConteneursContainers

Les conteneurs sont couramment utilisés conjointement avec une architecture en microservices.Containers are commonly used in conjunction with a microservices architecture. Les conteneurs peuvent également servir à mettre en conteneur des applications ou services web qui suivent un modèle d’architecture.Containers can also be used to containerize web apps or services that follow any architectural pattern. Le .NET Framework peut être utilisé pour les conteneurs Windows, mais par sa modularité et sa légèreté, .NET Core est un meilleur choix pour les conteneurs..NET Framework can be used on Windows containers, but the modularity and lightweight nature of .NET Core makes it a better choice for containers. Quand vous créez et déployez un conteneur, la taille de son image est beaucoup plus petite avec .NET Core qu’avec le .NET Framework.When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. Grâce à sa nature multiplateforme, vous pouvez déployer des applications serveur sur des conteneurs Docker Linux, par exemple.Because it's cross-platform, you can deploy server apps to Linux Docker containers, for example.

Les conteneurs Docker peuvent être hébergés dans votre propre infrastructure Windows ou Linux, ou dans un service cloud comme 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 peut gérer, orchestrer et mettre à l’échelle des applications basées sur le conteneur dans le cloud.Azure Container Service can manage, orchestrate, and scale container-based applications in the cloud.

Besoin de systèmes scalables et hautes performancesA need for high-performance and scalable systems

Quand votre système a besoin de performances et d’une scalabilité optimales, .NET Core et ASP.NET Core sont vos meilleures options.When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options. Un runtime serveur hautes performances pour Windows Server et Linux fait de .NET un framework web particulièrement attractif d’après les bancs d’essai TechEmpower.High-performance server runtime for Windows Server and Linux makes .NET a top performing web framework on TechEmpower benchmarks.

Niveau de performance et scalabilité sont particulièrement pertinents pour les architectures en microservices, où des centaines de microservices peuvent être en cours d’exécution.Performance and scalability are especially relevant for microservices architectures, where hundreds of microservices may be running. Avec ASP.NET Core, les systèmes sont exécutés avec un nombre bien inférieur de serveurs/machines virtuelles.With ASP.NET Core, systems run with a much lower number of servers/Virtual Machines (VM). Cette réduction engendre une baisse des coûts d’infrastructure et d’hébergement.The reduced servers/VMs save costs in infrastructure and hosting.

Besoin d’une installation côte à côte de versions .NET par niveau d’applicationA need for side by side of .NET versions per application level

Pour installer des applications avec des dépendances sur différentes versions de .NET, nous vous recommandons .NET Core.To install applications with dependencies on different versions of .NET, we recommend .NET Core. .NET Core permet d’installer côte à côte différentes versions du runtime .NET Core sur le même ordinateur..NET Core offers side-by-side installation of different versions of the .NET Core runtime on the same machine. Ainsi, plusieurs services peuvent cohabiter sur le même serveur, chacun d’eux sur sa propre version 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. De plus, les risques et les coûts liés aux opérations informatiques et aux mises à niveau des applications s’en trouvent réduits.It also lowers risks and saves money in application upgrades and IT operations.

Quand choisir .NET FrameworkWhen to choose .NET Framework

.NET Core offre des avantages significatifs pour les nouvelles applications et les nouveaux modèles d’application..NET Core offers significant benefits for new applications and application patterns. Toutefois, le .NET Framework est toujours le choix naturel pour de nombreux scénarios existants, et par conséquent il n’est pas remplacé par .NET Core pour toutes les applications serveur.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.

Applications .NET Framework actuellesCurrent .NET Framework applications

Dans la plupart des cas, vous ne devez pas migrer vos applications existantes vers .NET Core.In most cases, you don’t need to migrate your existing applications to .NET Core. Il est plutôt recommandé d’utiliser .NET Core quand vous étendez une application existante, telle que l’écriture d’un service web dans 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.

Besoin d’utiliser des packages NuGet ou des bibliothèques .NET tiers non disponibles pour .NET CoreA need to use third-party .NET libraries or NuGet packages not available for .NET Core

Les bibliothèques adoptent rapidement .NET Standard.Libraries are quickly embracing .NET Standard. .NET standard permet de partager du code sur toutes les implémentations de .NET, y compris .NET Core..NET Standard enables sharing code across all .NET implementations including .NET Core. Avec .NET 2.0 Standard, cela est encore plus simple :With .NET Standard 2.0, this is even easier:

  • La surface de l’API est désormais beaucoup plus grande.The API surface became much larger.
  • Un mode de compatibilité du .NET Framework a été introduit.Introduced a .NET Framework compatibility mode. Ce mode de compatibilité permet aux projets .NET Standard/.NET Core de référencer des bibliothèques .NET Framework.This compatibility mode allows .NET Standard/.NET Core projects to reference .NET Framework libraries. Pour en savoir plus sur le mode de compatibilité, consultez Annonce de .NET 2.0 Standard.To learn more about the compatibility mode, see Announcing .NET Standard 2.0.

Ainsi, seulement dans les cas où les bibliothèques ou les packages NuGet utilisent des technologies qui ne sont pas disponibles dans .NET Standard/.NET Core, vous devez utiliser le .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.

Besoin d’utiliser des technologies .NET non disponibles pour .NET CoreA need to use .NET technologies not available for .NET Core

Certaines technologies du .NET Framework ne sont pas disponibles dans .NET Core.Some .NET Framework technologies aren't available in .NET Core. Il se peut que certaines d’entre elles soient disponibles dans les prochaines versions release de .NET Core.Some of them might be available in later .NET Core releases. D’autres, qui ne s’appliquent pas aux nouveaux modèles d’application ciblés par .NET Core, risquent de ne jamais être disponibles.Others don’t apply to the new application patterns targeted by .NET Core and may never be available. La liste suivante présente les technologies les plus courantes absentes dans .NET Core :The following list shows the most common technologies not found in .NET Core:

  • Applications Web Forms ASP.NET : Web Forms ASP.NET n’est disponible que dans le .NET Framework.ASP.NET Web Forms applications: ASP.NET Web Forms are only available in the .NET Framework. ASP.NET Core ne peut pas être utilisé pour Web Forms ASP.NET.ASP.NET Core cannot be used for ASP.NET Web Forms. Il n’est pas prévu d’intégrer Web Forms ASP.NET à .NET Core.There are no plans to bring ASP.NET Web Forms to .NET Core.

  • Applications Pages Web ASP.NET : le framework Pages Web ASP.NET n’est pas inclus dans ASP.NET Core.ASP.NET Web Pages applications: ASP.NET Web Pages aren't included in ASP.NET Core.

  • Implémentation des services WCF.WCF services implementation. Même s’il existe une bibliothèque cliente WCF pour utiliser des services WCF à partir de .NET Core, l’implémentation serveur WCF est disponible uniquement sur le .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. Ce scénario ne fait pas partie du plan actuel pour .NET Core, mais il est envisagé pour l’avenir.This scenario is not part of the current plan for .NET Core but it’s being considered for the future.

  • Services liés aux flux de travail : Windows Workflow Foundation (WF), les services de flux de travail (WCF + WF dans un seul service) et les Services de données WCF (anciennement « ADO.NET Data Services ») sont disponibles uniquement dans le .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. Il n’est pas prévu d’intégrer WF/WCF+WF/WCF Data Services à .NET Core.There are no plans to bring WF/WCF+WF/WCF Data Services to .NET Core.

  • Prise en charge des langages : Visual Basic et F# sont pris en charge dans .NET Core, mais pas pour tous les types de projet.Language support: Visual Basic and F# are currently supported in .NET Core, but not for all project types. Pour obtenir la liste des modèles de projet pris en charge, consultez Options de modèle pour dotnet new.For a list of supported project templates, see Template options for dotnet new.

En plus de la feuille de route officielle, il existe d’autres frameworks à porter vers .NET Core.In addition to the official roadmap, there are other frameworks to be ported to .NET Core. Pour obtenir la liste complète, consultez les problèmes CoreFX portant l’étiquette port-to-core.For a full list, see the CoreFX issues marked as port-to-core. Cette liste ne représente pas un engagement de Microsoft à intégrer les composants concernés à .NET Core.This list doesn’t represent a commitment from Microsoft to bring those components to .NET Core. Elle reflète simplement le souhait de la communauté de les intégrer.They're simply capturing the desire from the community to do so. Si un des composants portant l’étiquette port-to-core vous intéresse, participez aux discussions sur GitHub.If you care about any of the components marked as port-to-core, participate in the discussions on GitHub. Et si vous pensez que quelque chose fait défaut, enregistrez un nouveau problème dans le dépôt CoreFX.And if you think something is missing, file a new issue in the CoreFX repository.

Besoin d’utiliser une plateforme qui ne prend pas en charge .NET CoreA need to use a platform that doesn’t support .NET Core

Certaines plateformes Microsoft ou tierces ne prennent pas en charge .NET Core.Some Microsoft or third-party platforms don’t support .NET Core. Par exemple, certains services Azure, tels que Service Fabric Stateful Reliable Services et Service Fabric Reliable Actors, exigent .NET Framework.For example, some Azure services such as Service Fabric Stateful Reliable Services and Service Fabric Reliable Actors require .NET Framework. D’autres services fournissent un SDK qui n’est pas encore utilisable sur .NET Core.Some other services provide an SDK not yet available for consumption on .NET Core. Il s’agit d’une circonstance transitoire, car tous les services Azure utilisent .NET Core.This is a transitional circumstance, as all of Azure services use .NET Core. En attendant, vous pouvez toujours utiliser l’API REST équivalente au lieu du SDK client.In the meantime, you can always use the equivalent REST API instead of the client SDK.

Voir aussiSee also