Dans un projet, il existe plusieurs références à la bibliothèque Ninject qui ont leur propre version et les tests unitaires échouent, erreur:
Message: System.IO.FileLoadException: impossible de charger le fichier ou l'assembly 'Ninject, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = c7192dc5380945e7' ou l'une de ses dépendances. La définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040) ---- System.IO.FileLoadException: Impossible de charger le fichier ou l'assembly 'Ninject, version = 3.2.0.0, Culture = neutre, PublicKeyToken = c7192dc5380945e7' ou l'une de ses dépendances. La définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040)
1- fichier csproj
<Reference Include="Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll</HintPath>
</Reference>
2- packages.config
<package id="Ninject" version="3.2.2.0" targetFramework="net462" />
3- app.config
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
4- dossier de références -> développer -> clic droit sur Ninject -> propriétés
Version: 3.2.0.0
5- Gérer les paquets NuGet -> installés ->
ressemble quelque part dans mon projet référencé à la version 4.0.0.0 et 3.2.0.0 Je veux seulement faire référence à la version 3.2.2.0.
comment faire ça?
quelles sont les différences entre ces références?
Je sais que ceci est un ancien post, mais je pense que cette idée sera très utile pour résoudre les problèmes.
Dans votre exception, vérifiez quel Assembly est en cours de chargement. Cette assemblée est celle qui requiert la version spécifique d’Assembly dont elle dépend et qui jette les exceptions s’il s’agit d’une version incorrecte. Il est fort probable que vous ayez rétrogradé l’Assemblée dépendante. Même si les paquets et les références de nuget peuvent être corrects, l’important est l’Assemblée dans le dossier bin.
Vérifiez si tous les assemblys sont supprimés lorsque vous nettoyez la solution/projet. si ce n'est pas le cas, supprimez tout ce qui n'a pas été supprimé.
Pour ninject, le problème est probablement Ninject.Web.Common.WebHost qui n'est pas supprimé lors du nettoyage de la solution/du projet. Il n'est pas référencé directement dans le projet, mais copié dans le dossier bin.
Dans mon cas, il essayait de trouver Ninject 3.3.3.0 (et j'avais installé la v3.3.4)
J'ai vérifié fichier projet (.csproj), web.config et packages.config , et tout allait bien.
Je sais que ça semble idiot ... mais ça a réglé le problème pour moi!
J'ai eu exactement le même problème avec les mêmes numéros de téléphone que vous.
Il se passe quelque chose d'étrange avec Ninject 3.2.2.0.
Ce qui a résolu cela pour moi a été de laisser le paquet 3.2.2 installé. Laissez le fichier packages.config seul et modifiez le fichier app.config en 3.2.0.0. Oui. C'est vrai. Pas à 3.2.2.0, mais à 3.2.0.0. C'est ce que l'exception d'exécution fait pleurnicher, alors j'ai pensé essayer.
Donc, pour résumer:
Fichier CSProj:
<Reference Include="Ninject, Version=3.2.0.0, Culture=neutral, PublicKeyToken=c7192dc5380945e7, processorArchitecture=MSIL">
<HintPath>..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll</HintPath>
</Reference>
Packages.config:
<package id="Ninject" version="3.2.2.0" targetFramework="net452" />
App.config:
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
</dependentAssembly>
Étant donné que j'exécute Ninject dans un service Windows, je devais installer Le fichier ServiceName.exe.Config afin que les informations app.config soient correctement chargées lors du démarrage de mon service.
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="3.3.3.0" newVersion="3.3.4.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>