2011-03-22 6 views
7

J'essaie d'ajouter une référence à une DLL .Net 2.0 dans une application WPF qui est ciblée sur le Framework .Net 4. J'ai ajouté <startup useLegacyV2RuntimeActivationPolicy="true"> au fichier app.config. L'application WPF se construit correctement, mais obtient une BadImageFormatException au moment de l'exécution en essayant d'accéder à la DLL .Net 2.0.utiliser .Net 2.0 dll dans .net 4.0 application wpf

« On a tenté de charger un programme avec un format incorrect »

Cela fonctionne avec un nouveau projet WPF de test, mais ne fonctionne pas sur mon application. Mon application utilise Entity Framework et MEF. Ces technologies pourraient-elles causer le problème?

Des idées?

Edit: Résolu

Selon le commentaire par Alois ci-dessous, j'avais mon application principale cible de « Any CPU » et la DLL a été la cible à 32 bits.

<startup useLegacyV2RuntimeActivationPolicy="true"> n'a pas été nécessaire

+2

Est-il possible que l'assembly soit compilé pour 32 bits et que vous le chargez dans un processus 64 bits ou vice versa? Utilisez les corflags du SDK .NET Framework pour vérifier. –

+0

@Alois: Merci. Je n'avais pas pensé à ça. Mon application était ciblée sur "Tout processeur". Le changer en x86 le laisse charger correctement. – Mike

Répondre

2

Lorsque vous devez utiliser l'attribut useLegacyV2RuntimeActivationPolicy vous travaillez avec un ensemble en mode mixte qui a été écrit en C++/CLI et le ciblage la version 2.0.50727 du CLR. Un tel assembly contient à la fois du code managé et un code machine natif. Ce code machine est 32 bits dans votre cas, vous ne pouvez pas l'exécuter dans un processus 64 bits. Quelle est la signification de l'exception? La définition de la cible Platform à x86 dans votre projet EXE est requise.

+0

Oui. Voir les commentaires ci-dessus dans la question. Il était déjà compris que je chargeais du code 32 bits dans un processus 64 bits. En outre, useLegacyV2RuntimeActivationPolicy n'était pas requis. C'était seulement le problème de 32 bits. J'ai été capable de supprimer useLegacyV2RuntimeActivationPolicy = "true" – Mike

Questions connexes