web-dev-qa-db-fra.com

ambiguïté dans la version des références de paquets

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 ->  enter image description here

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?

6
M.Khooryani

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.

14
Roy B

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.

  • J'ai désinstallé tous les packages Ninject NuGet de tous mes projets.
  • Ensuite, allez dans "Manage NuGet packages for Solution " et réinstallez tous les packages Ninject pour tous les projets à partir de là.

Je sais que ça semble idiot ... mais ça a réglé le problème pour moi!

3
Carlos R Balebona

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>
1
Jon Koeter

É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>
0
Zamboni