Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir
la newsletter hebdomadaire des développeurs et IT pro

.NET Core ou .NET Framework ? Quelle implémentation adopter pour son projet ?
Par Hinault Romaric

Le , par Hinault Romaric, Responsable .NET
Microsoft avait créé le Framework .NET en 2000 pour offrir aux développeurs une plateforme unique pour le développement d’applications sous son système d’exploitation Windows.

De ce fait, le Framework .NET en plus de prendre en charge plusieurs langages, permet de mettre en place de nombreux types d’applications (WPF, WinForms, ASP.NET WebForms, Azure, etc.).

Autrefois, le développement d’applications était majoritairement dédié aux systèmes d’exploitation pour PC et serveurs. Un marché dont Windows détenait plus de 90 % de part. Le Framework .NET n’avait donc pas besoin de s’étendre à d’autres plateformes pour être compétitif et attirer un large panel de développeurs.

Cependant, l’écosystème IT a évolué. Ce dernier a subi une profonde mutation. Le développement pour les terminaux mobiles, les objets connectés, le Cloud, est de plus en plus plébiscité par les développeurs. Dans ce nouveau marché, les terminaux sous Windows représentent moins de 20 % (d’après des chiffres publiés par Microsoft en 2014, la part de marché de l’OS était évaluée à 14 %).

Il n’est plus question de se cantonner uniquement à Windows. Si Microsoft souhaite que la plateforme .NET et ses langages (en particulier C#, qui est le langage phare de la firme de Redmond) demeurent compétitifs, elle doit s’ouvrir à d’autres écosystèmes.

Microsoft a compris cela. Toutefois, avec de nombreuses API extrêmement liées à Windows, un simple port du Framework .NET n’était pas envisageable. De plus Microsoft ne voulait pas traîner certaines vieilles casseroles de la plateforme.

C’est ainsi que Microsoft a décidé de créer .NET Core. Il s’agit d’un fork open source du Framework .Net bâti sur les bases suivantes : multiplateforme, participation de la communauté, performance, modularité, souplesse, etc.

Avec .NET Core, il existe désormais deux déclinaisons de la plateforme .NET . Chacune disposant de son propre cycle de développement et bénéficiant les deux du support de Microsoft.

N.B. Avec le rachat de Xamarin par Microsoft, il existe en fait trois implémentations de la plateforme .NET qui sont supportées par la firme, dont Mono pour Xamarin. Je ne vais pas évoquer Xamarin dans ce billet de blog.

Dans le cadre de la mise sur pied d’une application, le développeur .NET sera dorénavant amené à faire un choix. Faut-il utiliser le Framework .NET ou s’orienter vers le nouveau venu .NET Core ? Quels seront les impacts pour mon projet ? Quel est le niveau de compatibilité entre les deux ? Sont autant de questions que doivent être amenés à se poser les développeurs avant d’opter pour une plateforme.

Différence fondamentale entre .NET Framework et .NET Core

Contrairement au Framework .NET qui fonctionne uniquement sur Windows ou Windows Server, .NET Core peut être utilisé aussi bien sur Windows que sur Linux et OS X. La conséquence de cette ouverture est le manque de support d’applications qui reposent sur des technologies Microsoft comme WPF, WinForms ou encore ASP.NET WebForms.

.NET Core est développé en open source avec la contribution de la communauté. Ce qui n’est pas le cas pour le Framework .NET. Le code source de .NET Core et sa documentation sont disponibles sur GiHub.

.NET Core implémente de nombreuses API communes avec le Framework .NET. En plus d’API qui sont spécifiques à Unix, Linux et OS X. Les API communes sont regroupées dans .NET Standard, qui est implémenté à la fois par .NET Core et .NET Framework. Ce qui signifie que tout code qui cible .NET Standard, peut s’exécuter sur .NET Core et .NET Framework. Ce qui rend assez simple le partage de code entre les deux plateformes.


Multiplateforme

Il va de soi que si vous développez une application qui devra s’exécuter sur Windows, Linux ou encore OS X, vous devez utiliser .NET Core qui est multiplateforme.

De plus, vous pouvez directement développer votre application en utilisant le système d’exploitation sur lequel cette dernière sera exécutée. Le SDK .NET Core offre de nombreux outils en ligne de commande pouvant être utilisés pour créer, compiler, générer et publier une application .NET Core sous n’importe quel OS.

Pour l’édition de code, Visual Studio Code peut être utilisé. Bien qu’assez éloigné de Visual Studio en termes de fonctionnalités, il a le mérite d’être open source, multiplateforme, léger et offre les fonctionnalités recherchées dans un EDI comme la coloration syntaxique, l’IntelliSence ou encore le débogage. De plus, grâce au projet OmniSharp, les compilateurs pour C# et F#, ainsi que les outils de développement pour .NET Core peuvent s’intégrer avec d’autres éditeurs comme Vim, Atom ou encore Sublime Text.

Performance

Une application ASP.NET Core, par exemple, est dix fois plus rapide que la même application ASP.NET.

Dans un récent billet de blog, Microsoft met en avant les améliorations significatives des performances de .NET Core par rapport au Framework .NET, en ce qui concerne notamment les collections, la compression, la cryptographie, les fonctions mathématiques, la sérialisation, et bien plus.

Cloud et microservices

La modularité de .NET Core permet de publier les applications uniquement avec les bibliothèques qui sont utilisées par l’application. Ce qui réduit de façon drastique la taille d’une application .NET Core. Cela fait donc de la plateforme un client de choix pour les plateformes de cloud et les microservices. Les ressources cloud étant payées à l’utilisation (espace de stockage, CPU, mémoire, etc.), la taille de l’application peut avoir un incident non négligeable sur votre facture.

En microservice, les développeurs pourront mettre en place des petites applications qui s’exécutent side-by side en offrant de meilleures performances qu’avec .NET Framework.

Conteneurs

Docker jouit de nos jours d’une grosse popularité. La plateforme est de plus en plus utilisée par les développeurs pour packager et exécuter leurs applications. Si vous envisagez d’utiliser un conteneur pour exécuter votre application, vous devez choisir .NET Core pour développer cette dernière. Certes il est possible de déployer des applications .NET Framework dans des conteneurs Docker sur Windows, mais la taille de l’image est beaucoup plus importante qu’avec .NET Core et votre image ne pourra être exécutée que sur un hôte Windows.

Une application ASP.NET Core par exemple, est self-hosted, donc ne nécessite d’aucun autre programme supplémentaire pour être exécutée dans un conteneur. De plus, vous pouvez utiliser le serveur Web de votre choix en complément (Apache, NGinx, etc.).

Conclusion

Lorsque vous débutez avec le développement d’une nouvelle application, vous devez initialement, selon moi, envisager d’utiliser .NET Core. La plateforme, bien que jeune, est assez stable et bénéficie de toute l’expérience et les leçons tirées dans la mise en place du Framework .NET.

Pour une application qui nécessite des technologies Windows, notamment WPF, vous devez architecturer votre application de telle sorte que les services de base reposent sur .NET Standard. Ce qui va favoriser le partage de code, si besoin.

Pour les applications existantes sur .NET Framework, Microsoft ne conseille pas le port de celles-ci sur .NET Core. Par contre, si vous voulez étendre les fonctionnalités d’une application existante, vous devez envisager utiliser .NET Core pour développer les nouveaux services.

Globalement, vous devez utiliser le Framework .NET quand :

  • vous devez utiliser des technologies .NET qui ne sont pas disponibles avec .NET Core ;
  • vous devez utiliser des packages NuGet qui ne sont pas disponibles sur .NET Core ;
  • vous devez utiliser une plateforme qui ne supporte pas .NET Core.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster un commentaire

Avatar de FERDIKAM FERDIKAM - Membre confirmé https://www.developpez.com
le 24/06/2017 à 14:31
Bonsoir,
Merci pour cette publication. Qu'en est-il de l'utilisation de Entity Framework Core. A-t-on les mêmes fonctionnalités que l'Entity Framework utilisé dans le .Net Framework ? Quels sont les SGBD qu' il supporte surtout que le .net core est multiplateforme.
Merci
Avatar de jolt-counter jolt-counter - Membre du Club https://www.developpez.com
le 24/06/2017 à 15:04
Citation Envoyé par FERDIKAM;bt5279
Bonsoir,
Merci pour cette publication. Qu'en est-il de l'utilisation de Entity Framework Core. A-t-on les mêmes fonctionnalités que l'Entity Framework utilisé dans le .Net Framework ? Quels sont les SGBD qu' il supporte surtout que le .net core est multiplateforme.
Merci

Bonjour, tu trouveras plus d'information ici https://docs.microsoft.com/en-us/ef/...d-ef6/features
Perso, j'ai utilisé Entity Framework Core avec PostgreSql, SqlServer et SQLite. Ca marche très bien sauf sur SQlite où il y avait quelques limitations.
Avatar de Hinault Romaric Hinault Romaric - Responsable .NET https://www.developpez.com
le 24/06/2017 à 16:01
Citation Envoyé par FERDIKAM;bt5279
Bonsoir,
Merci pour cette publication. Qu'en est-il de l'utilisation de Entity Framework Core. A-t-on les mêmes fonctionnalités que l'Entity Framework utilisé dans le .Net Framework ? Quels sont les SGBD qu' il supporte surtout que le .net core est multiplateforme.
Merci

Salut, Entity Framework Core n’implémente pas toutes les fonctionnalités d'Entity Framework 6.x, notamment le lazy loading. A date il existe des provider pour pratiquement tous les SGBD populaires, dont SQL Server, Oracle, PostgreSQL, SQLite et MySQL.
Avatar de Louis-Guillaume Morand Louis-Guillaume Morand - Rédacteur https://www.developpez.com
le 25/06/2017 à 9:18
Je suis en phase avec l'article mais je rajouterai un retour d'expérience sur mon projet actuel

Démarrage: on part sur un projet Asp.Web + micro-services, le tout en .Net Core 1.1 (la beta 2.0 en prod, très peu pour nous), sauf que rapidement: incompatibilité de package nugets (notamment certains packages App Insights, mais pas tous!) mais aussi sur des features comme le code coverage et code analysis qui ne marchent pas vraiment avec .Net Core (pour l'instant!!)

Semaine suivante: on casse tout, et on est repassé en Asp.Net Core Web (framework) c'est à dire tous les features d'Asp.Net Core mais 100% compatible .Net framework (4.6.2 dans notre cas)

Le seul soucis que l'on a eu, ce sont les templates de projet et documentations qui sont sont soit MVC, soit Core, mais le mode hybride, faut tout refaire à la main, un peu plus compliqué lorsque l'on veut mettre du angularJs 4 et webpack
Avatar de Hinault Romaric Hinault Romaric - Responsable .NET https://www.developpez.com
le 27/06/2017 à 0:54
Citation Envoyé par Louis-Guillaume Morand;bt5299
Je suis en phase avec l'article mais je rajouterai un retour d'expérience sur mon projet actuel

Démarrage: on part sur un projet Asp.Web + micro-services, le tout en .Net Core 1.1 (la beta 2.0 en prod, très peu pour nous), sauf que rapidement: incompatibilité de package nugets (notamment certains packages App Insights, mais pas tous!) mais aussi sur des features comme le code coverage et code analysis qui ne marchent pas vraiment avec .Net Core (pour l'instant!!)

Semaine suivante: on casse tout, et on est repassé en Asp.Net Core Web (framework) c'est à dire tous les features d'Asp.Net Core mais 100% compatible .Net framework (4.6.2 dans notre cas)

Le seul soucis que l'on a eu, ce sont les templates de projet et documentations qui sont sont soit MVC, soit Core, mais le mode hybride, faut tout refaire à la main, un peu plus compliqué lorsque l'on veut mettre du angularJs 4 et webpack

Il t'arrive encore de passer par ici LGM .

D'après mes observations, les travaux sont en cours par les éditeurs de packages pour le port de ceux vers .NET Standard 2.0. Cette version devrait contenir pas mal d'APIs communes. Je crois qu'avec la version 2.0 de .NET Core, on une plus importante compatibilité avec des packages nuget et des kits de développement Azure.

Sinon, bon courage pour ton projet. Ca doit être du fun .
Offres d'emploi IT
RESPONSABLE WEB ANALYTICS F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
Développeur WEB PHP F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
Développeur Web FULL-STACK
VACALIANS GROUP - Languedoc Roussillon - SETE (34)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil