545 votes

Quelle "configuration supplémentaire" est nécessaire pour référencer un assemblage 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 fondamentale est que je puisse utiliser le cadre System.Data.SQLite qui est compilé avec la version 2.X. Je vois que cela est possible, par exemple la réponse acceptée ici mais je ne vois pas comment y parvenir.

Lorsque j'essaie d'exécuter mon projet 4.0 en faisant référence à l'assemblage 2.X, j'obtiens.. :

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

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

5 votes

1 votes

1 votes

IMPORTANT : Si l'erreur se produit avec la colonne d'erreur "Fichier" comme SGEN alors le correctif doit être dans un fichier sgen.exe.config à côté de sgen.exe . Par exemple, pour VS 2015, créez C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config . Source : SGEN Assemblage en mode mixte Contenu minimal du fichier : <configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

693voto

Reed Copsey Points 315315

Afin d'utiliser un CLR 2.0 assemblage en mode mixte vous devez modifier votre fichier App.Config pour l'inclure :

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

La clé est le useLegacyV2RuntimeActivationPolicy flag. Cela permet au CLR d'utiliser la dernière version (4.0) pour charger votre assemblage en mode mixte. Sans cela, il ne fonctionnera pas.

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

1 votes

@Reed J'ai essayé votre suggestion, mais l'exception s'affiche toujours. J'ai vérifié deux fois l'app.config qui est copié dans mon dossier EXE et cela ne fonctionne toujours pas. L'exception apparaît lorsque j'utilise log4net. Je n'ai rien trouvé sur cette erreur concernant log4net, sauf ici : stackoverflow.com/questions/1866735/log4net-et-net-4-0 mais cela ne dit pas grand-chose. Avez-vous des idées sur la façon dont je peux obtenir plus d'informations sur mon problème particulier ?

1 votes

@Dave : Cela suggère que vous pouvez simplement utiliser une version native .NET 4 de log4net - cela semble être la meilleure option. S'il existe une version .NET 4, utilisez-la...

0 votes

@Reed il n'y en a pas, et j'ai en fait interprété cette réponse comme signifiant que vous devriez compiler log4net vous-même. Je suppose que je peux le faire, mais je préfère simplement prendre leur binaire précompilé et le référencer à partir de mon projet. Je vais y réfléchir un peu plus. Mais pouvez-vous penser à la raison pour laquelle changer app.config ne le fait pas fonctionner ? Je pensais que je devais peut-être utiliser programname.exe.config, mais j'ai essayé cela aussi et ça n'a pas marché. D'après mon expérience limitée, les deux noms de fichiers font la même chose.

37voto

JasCav Points 18931

Ce site post de forum sur le centre des développeurs .NET Framework. Cela pourrait vous éclairer.

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

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

2 votes

Comment cette configuration d'application doit-elle être utilisée pour la construction de NANT ?

15voto

En fonction de la version du framework que vous ciblez, vous pouvez regarder ici pour obtenir la chaîne correcte :

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

J'ai passé des heures à essayer de comprendre pourquoi ma version ciblant le client .Net 4.0 nécessitait la version complète. J'ai fini par utiliser ceci :

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

11voto

Raheel Khan Points 2871

Une fois que vous avez défini le app.config visual studio va générer une copie dans le dossier bin nommé App.exe.config . Copiez-le dans le répertoire de l'application pendant le déploiement. Cela semble évident mais, étonnamment, beaucoup de personnes manquent cette étape. Les développeurs WinForms ne sont pas habitués aux fichiers de configuration :).

0 votes

Une autre façon est de supprimer le fichier app.config et d'en ajouter un nouveau à partir de Project->Add->New item et de choisir General->Application Configuration File (ce qui n'est pas la même chose que de créer un fichier texte appelé app.config).

8voto

Wiser Web Points 71

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

L'ORDRE des déclarations de frameworks pris en charge dans app.config a en fait un effet sur l'exception de mode mixte qui est levée. Si vous inversez l'ordre des déclarations, vous obtiendrez une erreur de mode mixte. C'est l'objet de cette réponse.

Donc si vous obtenez l'erreur dans une application Windows Forms, essayez ceci, la plupart 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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X