Question

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

  

L'assemblage en mode mixte est construit sur la version 'v2.0.50727' du runtime et ne peut pas être chargé dans le runtime 4.0 sans informations de configuration supplémentaires.

La recherche sur Google m'a fourni la solution, à savoir l'ajouter à la configuration des applications:

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

Ma question est la suivante: que fait useLegacyV2RuntimeActivationPolicy ? Je ne trouve aucune documentation à ce sujet.

Était-ce utile?

La solution

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

  

L'un des problèmes récents que nous avons constaté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 manière dont il est lié aux anciens assemblys en mode mixte. Ces assemblys sont, par exemple, ceux qui sont compilés à partir de C ++ \ CLI. Les assemblys DirectX actuellement disponibles sont en mode mixte. Si vous voyez un message comme celui-ci, vous savez que vous avez rencontré le problème suivant:

     

L'assemblage en mode mixte est construit sur la version 'v1.1.4322' du moteur d'exécution et ne peut pas être chargé dans le moteur d'exécution 4.0 sans informations de configuration supplémentaires.

     

[Snip]

     

La bonne nouvelle pour les applications est que vous avez la possibilité de revenir à la liaison .NET 2.0 pour ces assemblys en définissant un indicateur app.config comme suit:

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

Cela ressemble donc à la façon dont le runtime charge les assemblys en mode mixte a changé. Je ne trouve pas de détails sur ce changement ni sur la raison pour laquelle cela a été fait. Mais l'attribut useLegacyV2RuntimeActivationPolicy revient au chargement de CLR 2.0.

Autres conseils

Voici une explication que j'ai écrite récemment pour vous aider à éliminer les informations sur cet attribut. 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:

  

[Installer .NET] v4 n’est pas "impactant" & # 8221 ;. Cela ne devrait pas changer le comportement des composants existants lors de l'installation.

     

L'attribut useLegacyV2RuntimeActivationPolicy vous permet en principe de dire: "J'ai quelques dépendances sur les API de shim héritées. Faites en sorte qu'ils fonctionnent comme avant avec le temps d'exécution choisi. & # 8221;

     

Pourquoi ne pas en faire le comportement par défaut? Vous pourriez faire valoir que ce comportement est plus compatible et facilite beaucoup le portage du code des versions précédentes. Si vous vous souvenez bien, cela ne peut pas être le comportement par défaut, car cela rendrait l’installation de la v4 très efficace, ce qui pourrait endommager les applications existantes installées sur votre ordinateur.

L'article complet explique cela plus en détail. Sur RTM, les documents MSDN sur ce point devraient être meilleurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top