web-dev-qa-db-fra.com

Plusieurs versions de .NET sur le même serveur

J'ai donc toujours su qu'il était correct d'exécuter plusieurs versions du framework .NET sur un seul ordinateur (client ou serveur). Cette question , bien qu'un peu ancienne, en parle.

Il y a quelque temps, cependant, j'ai été chargé de créer une nouvelle application ASP.NET, et j'essayais de décider d'utiliser le framework .NET complet ou .NET Core, et je suis tombé sur cet article de Microsoft. L'article indique que si j'ai besoin d'installations côte à côte du cadre, je dois utiliser .NET Core. Voici la citation complète:

Pour installer des applications avec des dépendances sur différentes versions de .NET, nous recommandons .NET Core. . NET Core propose une installation côte à côte de différentes versions du runtime .NET Core sur la même machine. Cette installation côte à côte permet plusieurs services sur le même serveur, chacun d'eux sur sa propre version de .NET Core.

Mais je pensais que les installations côte à côte du Framework étaient déjà possibles sans .NET Core? Qu'est-ce que je rate?

La raison pour laquelle je demande, c'est que j'ai actuellement une ancienne application ASP.NET qui utilise le .NET Framework 2.0, et je travaille maintenant sur une qui utilise .NET Core. J'ai rencontré quelques problèmes qui m'ont amené à envisager de passer de l'application .NET Core au .NET Framework 4.6 complet, mais cet article de Microsoft m'a un peu dérouté.

La question est: pourrai-je exécuter les deux applications (.NET Framework 2.0 et 4.6) sur le même serveur Windows 2008 R2 sans problème? Si oui, à quoi fait référence cet article?

Une dernière chose: mes deux applications (anciennes et nouvelles) utilisent Crystal Reports. Il est possible que la nouvelle application nécessite une version plus récente de Crystal Reports que l'ancienne application. Pourrai-je exécuter différentes versions de Crystal Reports comme celle-ci sur le même serveur? Est-ce la situation dans laquelle j'aurais besoin de .NET Core comme le dit l'article de Microsoft?

Je vous remercie

13
CJ Alpha

Les installations côte à côte du cadre ne sont pas seulement possibles, elles sont un fait. NET 1.0, 2.0 et tout ce qui précède 4.0 ont tous des installations distinctes. Toutefois:

  • .NET 3.0 et 3.5 utilisent tous deux le runtime 2.0 et ne sont donc pas vraiment séparés.
  • De même, .NET 4.5 et toutes les versions ci-dessus utilisent tous le runtime 4.0 et ne sont donc pas séparés les uns des autres. Pour compliquer davantage les choses, lorsque vous installez une version ultérieure, le runtime de base 4.0 est en fait mis à niveau.
  • Enfin, la version du framework choisie pour exécuter votre application a changé avec .NET 4.0. Les règles pour cela sont assez compliquées et dépendent à la fois des versions installées et de la configuration de l'application; voir cet article pour une discussion complète.

À votre question, alors:

Pourrai-je exécuter les deux applications (.NET Framework 2.0 et 4.6) sur le même serveur Windows 2008 R2 sans problème?

Si .NET Framework 2.0 et 4.6 sont tous deux installés, alors oui. En supposant qu'il n'y ait pas de paramètres de configuration spéciaux, l'application 2.0 s'exécutera sur le framework 2.0, mais elle peut également être configurée pour utiliser le framework 4.6 (qui se présentera comme le runtime 4.0).

Si oui, à quoi fait référence cet article?

L'article fait référence au fait que le .NET Framework complet a progressivement abandonné l'idée d'installations côte à côte parfaitement séparées en n'ayant aucune séparation entre la version mineure (et parfois même les versions majeures), tandis que .NET Core a doublé l'idée en permettant un déploiement autonome. Autrement dit, non seulement une application .NET Core 1.0 et une application .NET Core 2.0 peuvent coexister sans risque de partage des dépendances comme le feraient une application .NET Framework 2.0 et 3.5, même deux applications .NET Core 1.0 peuvent exister ensemble sans le partage des dépendances, ce qui n'est pas possible pour les applications .NET Framework complètes. Si (disons) un correctif est installé pour .NET 2.0, il affectera toutes les applications .NET 2.0, 3.0 et 3.5, au moins au niveau binaire. Vous ne pouvez pas choisir d'avoir certaines applications affectées par le correctif et pas d'autres (bien que des commutateurs de configuration soient généralement ajoutés pour un comportement qui rompt la compatibilité).

Une dernière chose: mes deux applications (anciennes et nouvelles) utilisent Crystal Reports. Il est possible que la nouvelle application nécessite une version plus récente de Crystal Reports que l'ancienne application. Pourrai-je exécuter différentes versions de Crystal Reports comme celle-ci sur le même serveur? Est-ce la situation dans laquelle j'aurais besoin de .NET Core comme le dit l'article de Microsoft?

Ceci est indépendant du cadre et dépend de la façon dont Crystal Reports gère lui-même la gestion des versions. Selon le fabricant , la réponse est oui, pour les versions majeures mais pas les mises à jour mineures:

L'installation côte à côte de différentes versions majeures de Crystal Reports Designer est prise en charge depuis Crystal Reports 9, car chaque version majeure installe le logiciel dans un répertoire différent.

Vous n'avez pas besoin de .NET Core pour rendre possible l'installation côte à côte de différentes versions d'assembly. De plus, même si vous avez utilisé un déploiement autonome de votre application .NET Core, cela ferait probablement encore référence à l'installation partagée de Crystal Reports sur la machine, et non à un déploiement autonome de Crystal Reports (je ne sais pas pense qu'une telle chose existe; je ne suis même pas sûr que Crystal Reports soit actuellement pris en charge sur .NET Core).

Dernier point mais non le moindre: notez que certaines versions de .NET sont plus officiellement prises en charge . Cela inclut .NET 4.6 - la version la plus récente encore officiellement prise en charge est .NET 4.6.2, qui nécessite Windows Server 2008 R2 SP1 . .NET 4.6 a quelques bugs de compilateur JIT très méchants, donc vous ne voulez vraiment pas l'utiliser de toute façon, support officiel ou non. Si votre serveur ne dispose pas encore d'une version de .NET antérieure à 2.0 installée, vous pouvez également passer directement à la dernière version (.NET 4.7.1 au moment de la rédaction).

12
Jeroen Mostert