Je déteste poser une question qui a été posée ici d'innombrables fois, aussi bien que blogué sur tout le lieu, mais je n'arrive toujours pas à faire fonctionner mon projet amélioré.L'assemblage en mode mixte [log4net] ne se chargera pas dans .NET 4.0, et ne fonctionnera pas une fois recompilé pour .NET 4.0
Mon application a été écrite en VS2008, ciblant .NET 3.5 SP1. J'ai juste mis à jour vers VS2010, et j'ai pensé que j'essaierais de profiter des nouvelles fonctionnalités de langage et de MEF intégré, donc j'ai changé tous mes projets pour cibler .NET 4.0. Après avoir tout obtenu (comme les événements post-construction, les références MEF, etc.) correctement configurés, j'ai exécuté mon application et j'ai reçu l'erreur toujours célèbre:
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.
J'ai ensuite ajouté l'attribut suivant à mon élément <startup>
dans app.config
:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
Mais quand je lance ma demande, je reçois toujours la même erreur. Y at-il quelque chose que je peux faire pour déboguer ce problème plus loin? Je n'ai littéralement aucune idée de quoi d'autre essayer. J'essaie de trouver autant d'informations que possible sur les assemblages en mode mixte et la façon dont ils interagissent avec le CLR, mais mes connaissances de base dans ce domaine sont au mieux limitées.
J'ai également essayé de contourner le problème en recompilant la source de log4net vers la cible .NET 4.0, mais cela n'a pas fonctionné comme je l'avais espéré. Après la compilation, je suis arrivé cette erreur:
règles de sécurité tout en héritage violé remplaçant membre: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext). L'accessibilité de la sécurité de la méthode prioritaire doit correspondre à l'accessibilité de la méthode redéfinie.
donc j'ai trouvé un poste qui a recommandé d'essayer d'ajouter la ligne suivante à AssemblyInfo.cs:
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
Et quand je l'ai fait, je me suis retrouvée tout de suite où j'ai commencé! (avec l'erreur d'assemblage en mode mixte).
Pouce.
Vous avez recompilé pour 4.0 et * encore * le CLR le voit comme 2.0? Utilisez Fuslogvw.exe pour savoir ce qui se trouve réellement. Méfiez-vous du GAC. –
@Hans merci pour le pourboire, je vais regarder dans cela! – Dave
Nous avons également porté certains de nos projets à 4.0 à partir de la version 3.5 mais n'avons eu aucun problème avec log4net ... le seul problème est survenu lors de l'utilisation de log4net dans les nouveaux projets qui tournaient sur le profil client. stackoverflow.com/questions/1767253/log4net-with-net-4-0/2679007#2679007). – veljkoz