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.
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!
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:
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 ... :)
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:
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!
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
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>
Vérifiez votre app.config/web.config et bien sûr vos références de projet.
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.
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