web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'Microsoft.Practices.Unity'

J'essaie de mettre à jour Unity vers la version (2.1.505.2), mais lorsque j'exécute l'application, la FileLoadException suivante est obtenue. 

Impossible de charger le fichier ou l'assembly 'Microsoft.Practices.Unity, Version = 2.0.414.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 ' ou une de ses dépendances.

Nous passons de Unity 2.0.414.0 à 2.1.505.2.

  • Toutes les références de projet dans la solution qui font référence à Unity font référence à la version correcte de la dll
  • Il n'y a pas de DLL Unity référencée dans le Gac. (vérifié deux fois en vérifiant gacutil -l)
  • J'ai supprimé toutes les dll Unity de l'archive. Double vérifié avec Powershell

    PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { "{0}`t{1}" -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }
    

Comment savoir ce qui fait encore référence à Unity 2.0.414.0?

FusionLogVw ne me dit pas quel DLL est à l'origine du problème. 

Toute aide est très appréciée!

16
bas

Le problème était une autre dll Microsoft qui fait référence à l'ancienne version de l'unité. J'ai découvert cela par hasard en vérifiant les espaces de noms de chaque dll référencée, et j'ai trouvé une autre dll contenant des espaces de noms avec "unité". 

Mise à jour:

  • Microsoft.Practices.EnterpriseLibrary.Common
  • Microsoft.Practices.EnterpriseLibrary.Validation

aux dernières versions publiées ont résolu le problème.

J'espère sauver la journée pour une âme perdue qui se tire les cheveux par la même occasion ... :)

12
bas

Vous devriez ajouter une redirection à l'assembly approprié:

Mais NOTEZ que la version 2.1.505.0 devrait être utilisée dans la redirection! 

<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
  </dependentAssembly>
</assemblyBinding>

Vous ne pouvez pas définir 2.1.505.2 pour la raison suivante:

enter image description here

Unity Assembly 2.1.505.2 contient différentes versions de AssemblyFileVersion et AssemblyVersion.

CLR ne se soucie pas de AssemblyFileVersion, c'est pourquoi AssemblyVersion est utilisé! Et AssemblyFileVersion n'est utilisé que par nuget!

1
Ievgen Naida

Puisque votre nouvelle question concerne la recherche de dépendances existantes sur un assembly, vous pouvez vous référer à cette question:

Comment trouver ce qui dépend d'une version spécifique d'une dépendance spécifique?

Qui fait référence à l’utilisation de Fuslogvw.exe

0
LameCoder

Je n'ai pas pu corriger le problème en utilisant la mise à jour EnterpriseLibrary dans la solution acceptée. J'ai fini par remplacer la version assemblée dépendante dans app.config , vous pouvez faire quelque chose de similaire pour forcer toute bibliothèque qui se plaint de la version à utiliser une autre version.

App.config: 

  <dependentAssembly>
    <assemblyIdentity name="Unity.Container" publicKeyToken="489B6ACCFAF20EF0" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.8.11.0" newVersion="5.8.11.0"/>
  </dependentAssembly>
0
Jacob Brewer

Vérifiez votre app.config/web.config et bien sûr vos références de projet.

0
Marko

Vue d'ensemble: C'était le code de quelqu'un. Je devais corriger un bogue dans le code. Ils m'ont donc fourni un fichier Zip d'application.

Je n'avais aucune idée de ce qui se passait et pourquoi toujours pour la première fois mon code était en cours d'exécution et après le redémarrage de l'application (après toute modification), il commençait à lancer Exception . code & base de données et ensuite commencé à annuler chaque étape que je faisais. Mais ça n'aide pas

Solution: Comme plusieurs problèmes ne peuvent pas résoudre ce problème , Mais lorsque je redémarrais, examinons chaque élément de nudification pour trouver la raison réelle qui a provoqué l’exception.

Pour chaque nouvelle construction, le dossier bin de mon application supprimant les dlls

alors la solution consiste à coller ces dll dans le dossier bin applications et à reconstruire le code (voir capture d'écran)

résultat: tout devrait être parti.

 enter image description here

0
Rinku

Si vous avez resharper, vous pouvez supprimer la référence au problème, construire, aller à la classe où il est utilisé (il y a une erreur) et obtenir resharper pour le réparer.

Enregistre de faffing autour, mais j'apprécie pas tout le monde a resharper: D

0
Netferret