L'assemblée manifeste définition ne correspond pas à la référence d'assembly

j'essaie d'exécuter des tests unitaires dans une application C# Windows Forms (Visual Studio 2005), et j'obtiens l'erreur suivante:

Système

.IO.FileLoadException: ne pouvait pas charger L'utilitaire file ou assembly, Version = 1.2.0.200, Culture=neutre, PublicKeyToken = 764d581291d764f7' ou l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)**

à X. Foo.FooGO()

à X. Foo.Foo2 (String groupName_) in Foo.cs: ligne 123

à X. Foo.UnitTests.FooTests.TestFoo () in FooTests.cs: ligne 98 * *

Système

.IO.FileLoadException: ne pouvait pas charger L'utilitaire file ou assembly, Version = 1.2.0.203, Culture=neutre, PublicKeyToken = 764d581291d764f7' ou l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

je regarde dans mes références, et je n'ai qu'une référence à Utility version 1.2.0.203 (l'autre est vieux).

des suggestions sur la façon dont je comprends ce qui essaie de se référer à cette ancienne version de ce fichier DLL?

de plus, je ne pense même pas avoir cette vieille assemblée sur mon disque dur. Y a-t-il un outil pour rechercher ce vieil assemblage versionné?

606
demandé sur Peter Mortensen 2008-10-18 17:16:26

30 réponses

le chargeur de montage .NET n'est pas capable de trouver le 1.2.0.203, mais il a trouvé le 1.2.0.200. Cette assemblée ne correspond pas à ce qui a été demandé et vous obtenez donc cette erreur. En termes simples, il ne peut pas trouver l'assemblée qui a été référencée. Assurez-vous qu'il peut trouver le bon assemblage en le mettant dans le GAC ou dans le chemin d'application. Voir aussi http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx .

386
répondu Lars Truijens 2013-09-09 13:03:00

Vous pouvez faire quelques choses pour résoudre ce problème. Tout d'abord, utilisez Windows file search pour rechercher votre disque dur pour votre assemblée (.DLL.) Une fois que vous avez une liste des résultats, faites View->choisissez Details... et ensuite, cochez "File Version". Cela affichera le numéro de version dans la liste des résultats, de sorte que vous pouvez voir où l'ancienne version pourrait provenir.

aussi, comme Lars l'a dit, vérifiez votre GAC pour voir quelle version y est listée. Ce Microsoft l'article stipule que les assemblages trouvés dans le GAC ne sont pas copiés localement pendant une construction, donc vous pourriez avoir besoin de supprimer l'ancienne version avant de faire une reconstruction tout. (Voir ma réponse à cette question pour les notes sur la création d'un fichier par lot pour faire ceci pour vous)

si vous ne savez toujours pas d'où vient l'ancienne version, vous pouvez utiliser le fuslogvw.application exe qui embarque avec Visual Studio pour obtenir plus d'informations sur la reliure échec. Microsoft a des informations sur cet outil ici . Notez que vous devrez activer la journalisation en définissant la clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog à 1.

86
répondu Seth Petry-Johnson 2017-05-23 12:10:41

je viens de rencontrer ce problème moi-même, et j'ai trouvé que la question était quelque chose de différent de ce que les autres ont rencontré.

j'avais deux DLLs dont mon projet principal était de faire référence: des cours D'entreprise.dll et CompanyControls.DLL. J'ai eu une erreur d'exécution en disant:

ne pouvait pas charger le fichier ou l'assemblage "CompanyClasses, Version = 1.4.1.0, Culture=neutral, PublicKeyToken=045746ba8544160c " ou l'une de ses dépendances. La situé la définition manifeste de l'Assemblée ne correspond pas à la référence d'assemblage

le problème, c'était que je n'avais pas de compagnie.les fichiers dll sur mon système avec un numéro de version 1.4.1. Aucun dans le GAC, aucun dans les dossiers app...aucun n'importe où. J'ai cherché la totalité de mon disque dur. Tous les CompanyClasses.les fichiers dll que j'avais étaient 1.4.2.

le vrai problème, j'ai trouvé, était que la compagnie contrôlait.dll référence est la version 1.4.1 de CompanyClasses.DLL. Je viens de recompiler les contrôles de la compagnie.dll (après L'avoir fait référence à des CompanyClasses.dll 1.4.2) et cette erreur a disparu pour moi.

52
répondu Nathan Bedford 2009-11-17 19:15:27

ce qui suit redirige n'importe quelle version d'assemblage vers la version 3.1.0.0. Nous avons un script qui mettra toujours à jour cette référence dans L'application.config afin que nous n'ayons plus jamais à traiter de cette question.

grâce à la réflexion, vous pouvez obtenir le public de l'assemblée et générer ce bloc à partir de la .dll fichier lui-même.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

notez que sans attribut D'espace de noms XML (xmlns) cela ne fonctionnera pas.

39
répondu Yaniv.H 2017-12-03 17:27:41

si vous utilisez Visual Studio, essayez" clean solution", puis reconstruisez votre projet.

35
répondu Tad 2010-07-13 03:27:38

si vous ne vous souciez pas de la version et que vous voulez juste que votre application tourne, alors faites un clic droit sur la référence et mettez 'specific version' à false. Les autres solutions ne marcheraient pas pour moi. enter image description here

32
répondu RayLoveless 2013-06-28 17:21:26

je viens de courir à travers cette question et le problème était que j'avais une vieille copie de la .dll dans mon répertoire de débogage d'application. Vous pouvez également vérifier là (au lieu du GAC) pour voir si vous le voyez.

20
répondu Neal Tibrewala 2009-09-03 00:00:33

j'ai ajouté un paquet NuGet, seulement pour réaliser qu'une partie de la boîte noire de mon application faisait référence à une version plus ancienne de la bibliothèque.

j'ai supprimé le paquet et Référencé le fichier DLL statique de l'ancienne version, mais le web.le fichier de configuration n'a jamais été mis à jour à partir de:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

à ce qu'il aurait dû retourner quand j'ai désinstallé le paquet:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
16
répondu frattaro 2017-04-01 08:07:28

dans mon cas, c'était une ancienne version de la DLL dans C:\WINDOWS\Microsoft.NET\Framework temporaire ASP.NET Files\ directory. Vous pouvez supprimer ou de remplacer l'ancienne version, ou vous pouvez supprimer et ajouter la référence à la DLL dans votre projet. Fondamentalement, de toute façon va créer un nouveau pointeur vers le temporaire ASP.NET des dossiers.

14
répondu Glade Mellor 2010-09-15 17:07:15

dans mon cas, cette erreur s'est produite lors de l'exécution d'un ASP.NET application. La solution était de:

  1. supprimer les dossiers obj et bin dans le dossier de projet

Propre ne fonctionne pas, de reconstruire n'ai pas de travail, toutes les références ont été très bien, mais ce n'était pas l'écriture de l'une des bibliothèques. Après avoir supprimé ces répertoires, tout fonctionnait parfaitement.

13
répondu Levi Fuller 2016-10-09 18:34:13

pour nous, le problème a été causé par autre chose. Le fichier de licence pour les composants DevExpress comprenait deux lignes, une pour une ancienne version des composants qui n'était pas installée sur cet ordinateur particulier. La suppression de l'ancienne version du fichier de licence a résolu le problème.

ce qui est fâcheux, c'est que le message d'erreur n'indiquait pas quelle référence causait les problèmes.

8
répondu Sire 2009-11-23 11:09:54

cette même erreur est lancée si vous essayez de lier en retard en utilisant la réflexion, si l'assemblée que vous liez à obtenir nommé fort ou a son jeton de clé publique changé. L'erreur est la même, même s'il n'y a pas d'Assemblée trouvée avec le token de clé publique spécifié.

vous devez ajouter le bon jeton de clé publique (vous pouvez l'obtenir en utilisant sn-T sur la dll) pour résoudre l'erreur. Espérons que cette aide.

5
répondu Guy Starbuck 2010-07-16 21:22:26

Mine était une situation très similaire à la poste par Nathan Bedford, mais avec une légère torsion. Mon projet aussi fait référence à la dll modifiée de deux façons. 1) directement et 2) indirectement en faisant référence à un composant (class library) qui lui-même avait une référence à la dll modifiée. Maintenant, mon projet Visual studio pour le composant (2) référencé la version correcte de la dll modifiée. Toutefois, le numéro de version du compnent lui-même n'a pas été modifié. Et en conséquence l'installation de la nouvelle version de le projet n'a pas de remplacer ce composant sur la machine client.

résultat final: la référence directe (1) et la référence indirecte(2) pointaient du doigt différentes versions de la dll modifiée à la machine du client. Sur ma machine dev, ça a bien marché.

résolution: Supprimer application; supprimer tous les DLLS du dossier application; réinstaller.C'est aussi Simple que ça dans mon cas.

5
répondu Bijimon 2013-09-16 11:05:29

je laisserai quelqu'un profiter de ma stupidité. J'ai quelques dépendances à une application complètement séparée (appelons cette App1). Les dll de cette App1 sont tirés dans ma nouvelle application (App2). Chaque fois que je fais des mises à jour dans APP1, je dois créer de nouvelles dll et les copier dans App2. Bien. . .J'en ai eu marre de copier et coller entre 2 versions différentes D'App1, donc j'ai simplement ajouté un préfixe "NEW_" à la dll.

bien. . . Je suppose que la construction le processus scanne le dossier /bin et quand il correspond à quelque chose de incorrect, il BARF avec le même message d'erreur comme indiqué ci-dessus. J'ai supprimé mes versions" new_ " et ça s'est bien construit.

4
répondu Mike Murphy 2012-03-13 15:32:56

mon problème était de copier du code source vers une nouvelle machine sans tirer sur aucun des assemblages mentionnés.

rien que je n'ai corrigé l'erreur, donc à la hâte, j'ai supprimé le répertoire BIN tout à fait. J'ai reconstruit mon code source, et ça a marché à partir de là.

4
répondu AEON Blue Software 2012-04-27 23:20:00

je voudrais juste ajouter que je créais une base ASP.NET projet MVC 4 et ajout de DotNetOpenAuth.AspNet via NuGet. Cela a abouti à la même erreur après que j'ai référencé un fichier DLL inadéquat pour Microsoft.Web.page.OAuth.

pour le réparer j'ai fait un Update-Package et nettoyé la solution pour une reconstruction complète.

qui a fonctionné pour moi et est un peu une voie paresseuse, mais le temps est de l'argent: - p

4
répondu Ben Pretorius 2017-11-26 00:22:57

j'ai eu cette erreur en construisant sur le service de construction de Team Foundation Server. Il s'est avéré que J'avais plusieurs projets dans ma solution en utilisant différentes versions de la même bibliothèque ajoutée avec NuGet. J'ai supprimé toutes les anciennes versions avec NuGet et ajouté la nouvelle comme référence pour tous.

le serveur de fondation D'équipe met tous les fichiers DLL dans un répertoire, et il ne peut y avoir qu'un seul fichier DLL d'un certain nom à la fois bien sûr.

4
répondu cederlof 2017-12-03 17:22:34

je viens de trouver une autre raison pour laquelle j'ai cette erreur. J'ai nettoyé mon GAC de toutes les versions d'une bibliothèque spécifique et j'ai construit mon projet en référence à une version spécifique déployée avec l'exécutable. Quand je lance le projet, j'ai cette exception à la recherche d'une nouvelle version de la bibliothèque.

La raison était l'éditeur de la politique . Lorsque j'ai désinstallé les versions de la bibliothèque de GAC, j'ai aussi oublié de désinstaller les assemblées de politique des éditeurs. ainsi, au lieu d'utiliser mon assemblage déployé localement, le chargeur d'assemblage a trouvé la Politique d'éditeur dans GAC qui lui a dit de rechercher une nouvelle version.

3
répondu Ladislav Mrnka 2012-06-01 13:07:32

Pour moi, la couverture de code de configuration dans le "Local.testtesttings" fichier "provoqué" le problème. J'ai oublié de mettre à jour les fichiers qui ont été référencés.

3
répondu uli78 2013-03-04 09:04:45

mon application.config contient un

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

pour npgsql. D'une façon ou d'une autre sur la machine de l'Utilisateur, mon application.EXE.la config a disparu. Je ne suis pas sûr que ce soit un utilisateur idiot, un bug de l'installateur, ou un antivirus piraté encore. Le remplacement du fichier a résolu le problème.

3
répondu Thomas 2017-12-03 17:26:48

nettoyer et reconstruire la solution peut pas remplacer toutes les dll du répertoire de sortie.

ce que je suggère est d'essayer de renommer le dossier de "bin" à "oldbin" ou " obj " à "oldobj "

et ensuite essayer de construire votre silution à nouveau.

incase si vous utilisez une dll tierce partie ceux que vous aurez besoin de copier dans le dossier" bin "ou" obj " nouvellement créé après la construction réussie.

espère que cela va travail pour vous.

3
répondu Ganesh Londhe 2017-12-03 18:39:23

supprimer manuellement l'ancien ensemble de l'emplacement du dossier et ajouter ensuite la référence aux nouveaux ensembles pourrait aider.

1
répondu rjain 2014-06-06 09:27:09

j'ai eu la même erreur... Dans mon cas, il a été résolu comme suit:

  • au début, lorsque l'application a été installée, les gens ici avaient utilisé Microsoft Enterprise Library 4.1 dans l'application.
  • dans la semaine précédente ma machine a été formatée et après cela aujourd'hui quand j'ai construit cette application alors il m'a donné une erreur que L'ensemble de bibliothèque D'entreprise est manquant.
  • puis J'ai installé Microsoft Enterprise Bibliothèque 5.0 que J'ai obtenu sur Google comme première entrée de recherche.
  • Puis, quand j'ai construit l'application puis il m'a donné l'erreur ci-dessus, c'est à dire L'assemblée manifeste définition ne correspond pas à la référence d'assembly.
  • après une grande partie d'un travail de recherche et d'analyse, j'ai trouvé que l'application se référait 4.1.0.0 et la DLL dans le dossier bin était de la version 5.0.0.0
  • ce que j'ai fait était alors j'ai installé la bibliothèque D'entreprise de Microsoft 4.1.
  • a supprimé la référence précédente(5.0) et ajouté la référence 4.0.
  • construit l'application et voilà ... il a fonctionné.
1
répondu user4846550 2015-04-29 13:33:02

voici ma méthode pour résoudre ce problème.

  1. à partir du message d'exception, obtenez le nom de la bibliothèque" problème "et le numéro de version" prévu".

enter image description here

  1. trouver toutes les copies de cela .dll dans votre solution, droit-cliquez sur eux, et de vérifier quelle version de la .dll il est.

enter image description here

Ok, donc dans cet exemple, mon .dll est certainement 2.0.5022.0 (donc le numéro de version D'Exception est erroné).

  1. rechercher le numéro de version qui apparaît dans le message D'Exception dans l'ensemble du .csproj fichiers dans votre solution. Remplacez ce numéro de version par le numéro réel de la dll.

Donc, en cet exemple, je voudrais remplacer cette...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... avec cette...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

travail fait !

1
répondu Mike Gledhill 2016-11-15 16:00:00

juste supprimer le contenu du dossier bin de votre projet et reconstruire la solution a résolu mon problème.

1
répondu dhiraj1mumbai 2017-08-10 04:15:27

dans mon cas, le problème était entre la chaise et le clavier: -)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

deux ou plusieurs assemblages différents voulaient utiliser une version différente de la bibliothèque DotNetOpenAuth, et ce ne serait pas un problème. En outre, sur mon ordinateur local un web.config a été mis à jour automatiquement par NuGet:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

Puis j'ai réalisé que j'avais oublié de copier/déployer le nouveau site web.config au serveur de production. Donc si vous avez la voie manuelle de déployer web.config, Vérifiez qu'il est mis à jour. Si vous avez le web complètement différent.config pour le serveur de production, vous devez fusionner ces sections dependentAssembly dans la synchronisation après avoir utilisé NuGet.

1
répondu qub1n 2017-12-03 17:21:26

j'ai reçu ce message d'erreur en raison de renvoyer à une assemblée qui avait le même nom que l'assemblée que je construisais.

cela compilé, mais il a surligné l'Assemblée référencée avec l'assemblée des projets en cours - causant ainsi l'erreur.

pour le corriger, j'ai changé le nom du projet et les propriétés d'assemblage disponibles en cliquant avec le bouton droit de la souris sur le projet et en choisissant "Propriétés".

0
répondu dan 2011-07-12 02:24:30

dans votre version assembly dans AssemblyInfo.fichier cs, utilisez un numéro de version fixe au lieu de spécifier *. Le * modifiera le numéro de version de chaque compilation. C'était le problème de cette exception dans mon cas.

0
répondu DevXP 2013-07-30 05:43:00

j'ai rencontré ce problème en utilisant un référentiel de paquets interne. J'avais ajouté le paquet principal pour le dépôt interne, mais pas les dépendances du paquet. Assurez-vous d'ajouter toutes les dépendances, dépendances de dépendances, récursives, etc. à votre dépôt interne.

0
répondu ScubaSteve 2014-01-24 16:01:08

j'ai eu le même problème aujourd'hui qui m'a empêché d'effectuer Add-Migration après que j'ai fait des changements dans le cadre de L'entité.

j'ai eu deux projets dans ma solution, appelons - les" Client "et" données " - un projet de bibliothèque de classe qui a tenu mes modèles EF et le contexte. Le Client a fait référence au projet de données.

j'avais signé les deux projets, puis j'ai apporté des modifications à un modèle EF. Après avoir enlevé la signature j'ai pu ajouter les migrations, et pourrait ensuite signer à nouveau le projet.

j'espère que cela peut être utile pour quelqu'un, en leur épargnant la frustration prolongée..

0
répondu Thomas Fauskanger 2014-08-01 13:55:22