Que fait 'useLegacyV2RuntimeActivationPolicy' dans la configuration.NET 4?




.net-4.0 app-config (2)

Après un peu de temps (et plus de recherche), j'ai trouvé cette entrée de blog par Jomo Fisher.

L'un des problèmes récents que nous avons constaté est que, en raison de la prise en charge des runtimes côte à côte, .NET 4.0 a modifié la manière dont il se lie aux anciens assemblages en mode mixte. Ces assemblages 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, alors vous savez que vous avez rencontré le problème:

L'assembly en mode mixte est construit sur la version 'v1.1.4322' de l'environnement 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'ère .NET 2.0 pour ces assemblages en définissant un flag app.config comme ceci:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

Il semble donc que la façon dont le module d'exécution charge les assemblages en mode mixte a changé. Je ne trouve aucun détail sur ce changement, ni pourquoi cela a été fait. Mais l'attribut useLegacyV2RuntimeActivationPolicy revient au chargement de CLR 2.0.

Lors de la conversion d'un projet qui utilisait SlimDX, et donc d'un code non géré, vers .NET 4.0, j'ai rencontré l'erreur suivante:

L'assembly en mode mixte est construit sur la version 'v2.0.50727' de l'environnement d'exécution et ne peut pas être chargé dans le runtime 4.0 sans informations de configuration supplémentaires.

Googling autour m'a donné la solution, qui est d'ajouter cela à la configuration des applications:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Ma question est, quelle est l'utilisation de useLegacyV2RuntimeActivationPolicy ? Je ne trouve aucune documentation à ce sujet.


Voici une explication que j'ai écrite récemment pour aider avec le vide d'informations sur cet attribut. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx (lien Internet Wayback Machine)

Pour citer les bits les plus pertinents:

[Installer .NET] v4 est "sans impact". Cela ne devrait pas changer le comportement des composants existants lorsqu'ils sont installés.

L'attribut useLegacyV2RuntimeActivationPolicy vous permet essentiellement de dire: «J'ai des dépendances avec les API shim héritées. S'il vous plaît, faites en sorte qu'ils fonctionnent comme ils le faisaient par rapport à l'exécution choisie. "

Pourquoi ne faisons-nous pas cela le comportement par défaut? Vous pourriez argumenter que ce comportement est plus compatible, et facilite le portage du code des versions précédentes. Si vous vous souvenez, cela ne peut pas être le comportement par défaut, car cela rendrait l'installation de v4 percutante, ce qui peut casser les applications existantes installées sur votre machine.

Le message complet explique cela plus en détail. À RTM, les documents MSDN à ce sujet devraient être mieux.







mixed-mode