2016-09-10 8 views
8

Je travaille sur un ancien système qui utilise NHibernate 3 et spring pour DI, je dois refactoriser cette solution. certains des projets de la solution utilisaient NHibernate 1.2, je les ai changés en NHibernate 3. Maintenant la seule version de NHibernate qui est utilisée dans la solution entière est 3.Pourquoi mon système tente-t-il de charger un type à partir d'une version non valide de l'assembly?

Maintenant le problème est quand j'essaye de charger n'importe lequel de les services Web dans la solution, le système essaie de charger un type de NHibernate 1.2, j'ai testé le projet publié dans un autre système et ça fonctionne très bien, et ça devrait être un problème avec mon système, ça me donne: pas charger le type 'NHibernate.Event.ListenerType' de l'assembly 'NHibernate, Version = 1.2.1.4000, Culture = neutre, PublicKeyToken = aa95f207798dfdb4'.

Quelqu'un peut-il m'aider à découvrir pourquoi CLR essaie de charger un type à partir d'un assemblage non référencé?

+0

Faites-vous référence à toutes les autres bibliothèques utilisant NHibernate 1.2? –

+0

@JonSkeet no jon J'ai vérifié toutes mes bibliothèques, aucune d'entre elles ne se référait à NHibernate 1.2, et à côté de cela il fonctionne parfaitement dans d'autres systèmes – BigBoss

+0

Des différences de configuration entre les environnements? Quelque chose comme BindingRedirect dans App.config/Web.config? – Corwin

Répondre

6

Merci à tous ceux qui ont essayé de me aider, mais J'ai trouvé la réponse.

Je .NET réflecteur sur mon système et une fois, j'utilisé que pour refléter NHibernate sur mon système et il était la version 1.2.1.4000 , il a créé une copie de mon DLL dans son cache et il était préféré dans l'ordre de chargement. J'ai supprimé le cache et maintenant tout fonctionne comme prévu

+0

comment vous avez supprimé le cache? J'ai un problème similaire – mah

+0

@mah juste supprimé "C: \ ProgramData \ Porte rouge \ .NET Reflector \ DevPath", j'ai utilisé "Assembly.LoadFile" pour charger le fichier que je voulais et vérifié l'adresse de l'assemblée retournée et trouver le chemin – BigBoss

0

Vous pouvez essayer de supprimer cet ensemble de cache d'assemblage global:

À l'invite de commandes, tapez la commande suivante: gacutil -u NHibernate

Gacutil.exe est une partie d'une suite de Windows SDK . Sur mon ordinateur il est situé dans C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Outils \ x64

+0

ty pour votre réponse mais j'ai déjà vérifié cela et NHibernate n'est pas dans mon GAC – BigBoss

0

Veuillez vérifier si vous avez une balise <bindingRedirect> dans votre App.config /Web.config fichier. J'ai fait face à un problème similaire dans un projet ASP.NET MVC avec Newtonsoft.Json.dll que j'ai résolu en mettant à jour les attributs oldVersion et newVersion de la balise <bindingRedirect>. https://noodlearoundnet.blogspot.in/2016/09/newtonsoft-json-dll-version-mismatch.html

+0

ty pour la réponse mais je n'ai aucune redirection implicite ou automatique pour NHibernate dans aucun des projets dans ma solution. – BigBoss

3

Même problème se produit avec moi plusieurs fois, mais avec différentes dll

Je vais partager ce que les étapes que je suivais pour se débarrasser de ce problème

  1. Supprimer Debug et le dossier Release
  2. Supprimer dossier obj
  3. Décharger le projet et le charger à nouveau (clic droit sur le projet et cliquez sur Décharger, puis cliquez avec le bouton droit et cliquez sur Charger le projet)
  4. Faites un clic droit sur la solution et cliquez sur Nettoyer la solution
  5. Clic droit sur la solution et cliquez sur Régénérer la solution

J'espère que cela fonctionnera avec vous

+0

ty pour la réponse, mais je crée une nouvelle solution sur mon système, utilise les mêmes DLL et le même problème se produit. Je pense que quelque chose ne va pas sur mon système – BigBoss