De mélange .NET 3.5 4/4.5 assemblées dans le même processus
J'aimerais migrer un .NET 3.5 WinForms application basée sur le dernier .Version NET (4.5).
Utilise l'application "externe" des composants (peuvent être considérés comme des plugins) qui sont également en train de .NET 3.5.
Je voudrais savoir ce runtime/bibliothèques de base sont utilisés dans le cas où nous convertir SEULEMENT L'APPLICATION à compiler à l'aide .NET 4.5?
Si ce scénario fonctionne correctement? (le chargement .NET 3.5 assemblées dans un 4.5 processus)?
* Le plugin assemblées sont chargés via la réflexion.
Comment le common language runtime, runtime gérer un tel scénario? est-ce une pratique sécuritaire?
- Pas assez confiant pour poster une réponse ici, mais je dois avoir une .NET 4.0 application WPF, qui utilise de nombreux .NET 3.5 bibliothèques sans aucune difficulté. Donc, ma pensée ici, c'est qu'il devrait fonctionner très bien.
- Je me demande comment cela fonctionne réellement? seulement 4,5 bibliothèques sont utilisées? ou un mélange des deux, 3.5 et 4.5, est chargé dans le processus?
- Je pense que ce serait un mélange des deux, mais je n'ai jamais réellement testé que pour être sûr.
- 4.5 est censé être totalement compatible avec la version 4.0. Voir cette question quelques infos sur 4.0 dernières modifications.
Vous devez vous connecter pour publier un commentaire.
Si vous recompilé le programme principal de votre application cible .NET 4.x ou utiliser une application.exe.fichier de configuration avec les
<supportedRuntime>
élément de force CLR version 4 pour avoir utilisé alors vous n'aurez aucun mal à utiliser les deux .NET 3.5 et .NET 4.0 assemblées. CLR v4 n'a pas de problèmes de lecture de 3,5 assemblées, il est rétro-compatible. Pas l'inverse, CLR v2 ne peut pas lire la version 4 assemblées, qui est pourquoi vous avez besoin de la .fichier de configuration si votre EXE n'est pas le ciblage v4.La seule ride est les dépendances que votre 3,5 assemblée a sur de vieux cadre des assemblées. Il va par exemple demander pour la version 2.0.0.0 de mscorlib.dll. Le CLR automatiquement traduit ces demandes et les remplace par la version 4.0.0.0. Qui en général fonctionne bien, à la norme 4.0 cadre des assemblées sont très compatibles avec les anciennes versions.
Microsoft n'a toutefois profiter de l'occasion avec 4.0 être un nouveau side-by-side version fixe et vieux bugs qui pourraient ne pas être facilement résolu sans risquer de casser le code qui accidentellement invoqué le comportement incorrect. Ils sont très obscures bugs et il est assez probable que ces corrections de bugs seront byte. Vous n'avez cependant avoir à re-tester votre code pour vous en assurer.
Toutes les assemblées d'utiliser les types de .NET Framework qui demande cibles.
Voici un test simple:
Projet "Net2Library " qui est une .NET Framework 2.0 de la Bibliothèque de Classe avec la classe suivante:
Projet "Net4Application " qui est une .NET Framework 4.0 Application Console que références Net2Library.dll et a classe suivante:
Sortie de la Console sera:
Vous pouvez aussi consulter les ressources suivantes:
.NET Framework Assemblée Unification Aperçu et De Liaison D'Assembly De Redirection.
Si vous avez un 3.5 assembly référencé à partir de 4,5 exécutable, les deux assemblées seront exécutées dans l'4.5 CLR de l'environnement. Cependant, la 3.5 assemblée cible de la v3.5 bibliothèques, pas la v4.0 (bien que le 4.0 bibliothèques auront tous les mêmes fonctionnalités que la 3.5 et plus).
Donc, au moins dans mon expérience, si vous voulez que les assemblages de ciblage 2.0-3.5 et autres assemblages de ciblage 4.0-4.5, vous aurez besoin de 3.5 et 4.5 versions framework installé sur l'ordinateur client. 3.5 est entièrement rétro-compatible retour à la 2.0, donc vous pouvez avoir 3.5, 3.0 et 2.0 le tout fonctionnant dans un environnement. 4.0-4.5 est compatible avec la plupart des vieux code, mais il y a quelques modifications importantes (CAS est un cas, je suis tombé récemment), et vous avez à cibler explicitement 4.0 (ou mettre en place un SupportedRuntime app.clé de configuration).
List<String>
à une bibliothèque de fonction qui attend un v3.5List<String>
?List<T>
type diffèrent, le CLR fondamentalement maréchal entre les deux types (pas tout à fait de la même manière que le regroupement pour des types non gérés/mémoire, depuis .Types de réseau ont beaucoup de métadonnées afin de simplifier le processus, mais la même idée de base).