Nous utilisons le package Windows Azure Storage NuGet version 4.1.0, qui dépend de Microsoft.Data.OData et a également ajouté ce package contenant la dll Microsoft.Data.Edm. Lorsque nous construisons et exécutons l'application, nous obtenons très occasionnellement l'erreur suivante:
Could not load file or Assembly 'Microsoft.Data.Edm' or one of its dependencies. The
located Assembly's manifest definition does not match the Assembly reference. (Exception
from HRESULT: 0x80131040)
Nous avons la redirection de liaison suivante dans le fichier web.config et avons également vérifié. Il s'agit de la seule version de Microsoft.Data.Edm référencée par tous les projets de la solution.
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
Parfois, lorsque je regarde dans le dossier bin, je trouve que la version DLL de Microsoft.Data.Edm est v 5.6.0. J'ai parcouru tous les projets et je ne trouve pas de référence à Microsoft.Data.Edm, à l'exception du client de stockage, qui est définitivement 5.6.1.
Quel est le meilleur moyen d’essayer de déterminer l’origine de la version 5.6.0? Lorsque nous obtenons cette erreur, nous supprimons les dossiers bin et obj, puis nous reconstruisons et tout fonctionne normalement. La version 5.6.1 est disponible et tout fonctionne, mais finalement, cela se reproduit.
MODIFIER:
Nous avons de nouveau mis à niveau toutes les dernières versions de NuGet et toujours pas de chance, j’ai exécuté un outil qui affiche les dépendances suivantes:
Possible conflicts for Microsoft.Data.Edm:
Microsoft.Data.OData references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Data.Services.Client references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.Edm, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Possible conflicts for Microsoft.Data.OData:
Microsoft.Data.Services.Client references Microsoft.Data.OData, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Ce que je ne comprends pas, c’est que nous avons défini les redirections de liaison d’application, mais la version 2.6.0 est parfois copiée et parfois la version 2.6.2. Est-ce que quelqu'un sait pourquoi cela se produirait, jamais eu ce problème auparavant.
J'avais le même message d'erreur, mais mon problème n'était pas lié à un produit Azure. Dans mon cas, j'ai mis à jour OData de la version 3 à la version 4 et il me semble que Nuget a laissé des redirections de liaison pour les DLL obsolètes. Au total, il y en avait trois, Microsoft.Data.Edm, Microsoft.Data.OData et System.Spatial.
Ma solution était de supprimer les redirections de liaison obsolètes. Vous devriez également supprimer les anciennes DLL situées dans votre dossier bin si votre processus de construction ne le fait pas.
Voici quelques choses que vous pouvez essayer:
HTH.
Une chose qui semble parfois résoudre ce problème pour les membres de mon équipe est de fermer toutes les instances de Visual Studio, de supprimer le contenu du répertoire de packages, de rouvrir Visual Studio, puis de restaurer des packages et de les reconstruire. Cela ne fonctionne pas toujours bien.
Nous avons pu identifier le problème sur l'une de nos machines en identifiant le projet problématique en augmentant la verbosité de sortie de la génération de Visual Studio:
Ensuite, nous avons recherché la sortie et identifié le projet cible posant problème en recherchant "Microsoft.Data.Edm". Nous avons remarqué qu'il semblait y avoir une dépendance indirecte à Microsoft.Data.Edm, mais nous avons également constaté que Assembly n'était pas explicitement inclus en tant que package pour ce projet. Ainsi, en utilisant la console du package Nuget, nous avons ciblé le projet et exécuté: Install-Package Microsoft.Data.Edm
Qui a résolu le problème.
J'ai rencontré un cas similaire aujourd'hui, dans ma situation, la construction copie toujours une ancienne version dll dans le dossier de débogage, la raison en est que mon projet ne fait pas directement référence à cette dll, mais à un autre projet faisant référence à cette dll.
Ainsi, lors de la construction, mon projet trouve une ancienne version de GAC ou d’un autre endroit.
Je l'ai résolu par référence explicite à cette dll dans le projet à partir du bon emplacement.
comme ça:
<Reference Include="Microsoft.Data.Services.Client, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.Data.Services.Client.5.6.1\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
</Reference>
Je viens d'avoir ce même problème sur mon serveur de build et en vérifiant la sortie de build, j'ai remarqué ce qui suit:
Copie du fichier de "C:\Programmes de fichiers (x86)\Services de données WCF Microsoft\5.6\bin.NETFramework\Microsoft.Data.Edm.dll" vers "bin\Microsoft.Data.Edm.dll".
On dirait qu'il y a quelque chose installé sur le serveur de build qui ne se trouve pas sur ma machine, donc je dois le localiser.
C'est probablement un problème de chemin virtuel sur IIS (je pense que cet assembly a été chargé en premier au démarrage de l'application).
J'ai le même problème lorsque je lance deux projets à partir de différents emplacements sur le disque, mais avec les mêmes chemins virtuels.
La résolution est de supprimer ce chemin d’IIS, de réinitialiser le processus IIS et de créer à nouveau un chemin virtuel à partir de VS.
je l'ai trouvé !!
dans votre fichier app.config changez la version bindingredirect .
Faites que l’élément bindingredirect fasse référence à la version dont l’exception se plaint et que l’exception disparaîtra.
explication:
Le fichier app.config et l’assemblage de référence du projet sont probablement désynchronisés, ce qui a provoqué l’erreur.
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Ce problème a été résolu avec succès en fermant et en réouvrant Visual Studio.
Pour moi, je devais désinstaller le package WindowsAzure.MobileServices.Backend.Entity NuGet qui supprime de nombreux assemblys, y compris Microsoft.Data.Edm. Et puis je viens de le réinstaller et miraculeusement, cela a fonctionné!
Cela faisait partie de mon projet WebApi Azure Mobile Services. Il devait donc fonctionner et, heureusement, il fonctionne maintenant.
J'espère que ça aide.