Lors de la conversion d’un projet qui utilisait SlimDX, et a donc du code non géré, vers .NET 4.0, j’ai rencontré l’erreur suivante:
L’assemblage en mode mixte est construit avec la version ‘v2.0.50727’ du moteur d’exécution et ne peut pas être chargé dans l’environnement d’exécution 4.0 sans informations de configuration supplémentaires.
Googling autour de moi m’a donné la solution, qui consiste à append ceci à la configuration des applications:
Ma question est la suivante: quelle est la fonction useLegacyV2RuntimeActivationPolicy
? Je ne trouve aucune documentation à ce sujet.
Après un peu de temps (et plus de recherches), j’ai trouvé ce billet de Jomo Fisher.
L’un des problèmes récents que nous avons rencontrés est que, en raison de la prise en charge des environnements d’exécution côte à côte, .NET 4.0 a modifié la façon dont il se lie aux anciens assemblages en mode mixte. Ces assemblys sont, par exemple, ceux qui sont compilés à partir de C ++ \ CLI. Les assemblages DirectX actuellement disponibles sont en mode mixte. Si vous voyez un message comme celui-ci, vous savez que vous avez rencontré le problème:
L’assemblage en mode mixte est construit avec la version ‘v1.1.4322’ du moteur d’exécution et ne peut pas être chargé dans le runtime 4.0 sans informations de configuration supplémentaires.
[Couper]
La bonne nouvelle pour les applications est que vous avez la possibilité de revenir à la liaison de l’époque .NET 2.0 pour ces assemblys en définissant un indicateur app.config comme suit:
Il semble donc que la façon dont le runtime charge les assemblages en mode mixte a changé. Je ne trouve aucun détail sur ce changement, ni pourquoi. Mais l’atsortingbut useLegacyV2RuntimeActivationPolicy
revient au chargement du CLR 2.0.
Voici une explication que j’ai écrite récemment pour vous aider avec le manque d’informations sur cet atsortingbut. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx (lien Internet Archive Wayback Machine)
Pour citer les bits les plus pertinents:
[Installation de .NET] v4 est «non impactant». Il ne doit pas modifier le comportement des composants existants lorsqu’ils sont installés.
L’atsortingbut useLegacyV2RuntimeActivationPolicy vous permet essentiellement de dire: «J’ai des dépendances sur les API shim héritées. S’il vous plaît, faites-les fonctionner comme ils le faisaient auparavant. »
Pourquoi ne pas en faire le comportement par défaut? Vous pourriez faire valoir que ce comportement est plus compatible et facilite grandement le portage du code des versions précédentes. Si vous vous en souvenez, cela ne peut pas être le comportement par défaut car cela rendrait l’installation de v4 impactante, ce qui peut casser les applications existantes installées sur votre ordinateur.
Le post complet explique cela plus en détail. Au RTM, les documents MSDN à ce sujet devraient être meilleurs.