Question Quelle «configuration supplémentaire» est nécessaire pour référencer un assembly en mode mixte .NET 2.0 dans un projet .NET 4.0?


J'ai un projet dans lequel j'aimerais utiliser certaines des fonctionnalités de .NET 4.0, mais une exigence essentielle est que je puisse utiliser le framework System.Data.SQLite qui est compilé avec 2.X. Je vois la mention de cela possible comme la réponse acceptée ici mais je ne vois pas comment y arriver.

Quand j'essaye d'exécuter mon projet 4.0 en référençant l'assemblage 2.X, j'ai:

L'assemblage 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.

Quelle "configuration supplémentaire" est nécessaire?


498
2018-03-16 15:26


origine


Réponses:


Pour utiliser un CLR 2.0 assemblage en mode mixte, vous devez modifier votre fichier App.Config pour inclure:

<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy = "true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

La clé est la useLegacyV2RuntimeActivationPolicy drapeau. Cela provoque le CLR à utiliser la dernière version (4.0) pour charger votre assembly en mode mixte. Sans cela, cela ne fonctionnera pas.

Notez que cela ne concerne que les assemblys en mode mixte (C ++ / CLI). Vous pouvez charger tous les assemblys CLR 2 gérés sans spécifier cela dans app.config.


676
2018-03-16 15:30



Ce message du forum sur le .NET Framework Developer Center. Cela pourrait fournir un aperçu.

(Ajouter au fichier de configuration de l'application.)

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

33
2018-03-16 15:30



Selon la version du framework que vous ciblez, vous pouvez chercher ici la chaîne correcte:

http://msdn.microsoft.com/en-us/library/ee517334.aspx

J'ai perdu des heures à essayer de comprendre pourquoi ma version ciblant le client .Net 4.0 nécessitait la version complète. Je l'ai utilisé à la fin:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0.30319" 
               sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

13
2018-05-27 23:34



Une fois que vous avez défini app.config fichier, studio visuel va générer une copie dans le dossier bin nommé App.exe.config. Copiez ceci dans le répertoire de l'application pendant le déploiement. Cela semble évident, mais étonnamment, beaucoup de gens ratent cette étape. Les développeurs WinForms ne sont pas utilisés pour les fichiers de configuration :).


11
2018-02-11 14:14



L'utilisation d'assemblages 2.0 et 4.0 n'est pas tout à fait simple.

L'ORDRE des déclarations d'infrastructure prises en charge dans app.config a effectivement un effet sur l'exception du mode mixte lancé. Si vous retournez l'ordre de déclaration, vous obtiendrez une erreur de mode mixte. C'est le but de cette réponse.

Donc, si vous obtenez l'erreur dans une application Windows Forms, essayez ceci, principalement des applications Windows Forms.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

Ou si le projet n'est pas Windows Form. Dans un projet Web, ajoutez ceci au fichier web.config.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

8
2018-04-01 21:48



A pu résoudre le problème en ajoutant "Commencez" élément avec "useLegacyV2RuntimeActivationPolicy" ensemble d'attributs.

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

Mais il fallait le placer comme premier élément enfant de la balise de configuration dans App.config pour qu'il prenne effet.

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....

7
2017-11-12 10:48



Ce qui précède ne fonctionne pas pour moi (je travaille sur une application web) - mais cela a fait ...

Editez le fichier sgen.exe.config dans le dossier (je devais en créer un en premier); C: \ Program Files (x86) \ Outils de développement Microsoft \ Windows \ v8.0A \ bin \ NETFX 4.0 (Il y a aussi un dossier dans la version 7.0, mais je n'ai pas eu besoin de le changer, j'utilise VS2012)

Le contenu du XML devrait ressembler à ceci (même chose dans les réponses précédentes)

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>

5
2018-03-22 14:26