Ne pouvait pas charger le fichier ou l'assemblage Microsoft.Données.OData Version = 5.2.0.0 erreur dans le rôle D'Azure Cloud Worker en utilisant le stockage de Table

j'ai un problème très particulier avec le stockage sur table azurée. J'ai un projet .NET 4.5 dans Visual Studio 2012 où je m'occupe de toutes mes fonctions de Stockage De Table Azure. Ce projet / dll est référencé par deux autres projets, mon site Web MVC, et mon rôle de travailleur Azure. (Je suis en cours d'exécution sous l'Azur des Émulateurs sur ma machine, mais il arrive aussi lorsque je le déployer dans le cloud)

j'ai la fonction suivante est appelée lorsque je enregistrer ou récupérer un enregistrement:

internal static CloudTable GetTable(CloudStorageAccount storageAccount, string tableReference)
{
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

    CloudTable table = tableClient.GetTableReference(tableReference);
    table.CreateIfNotExists();

    return tableClient.GetTableReference(table.Name);
}

Dans mon site Web MVC j'ai une fonction qui sauvera un enregistrement à une table de stockage Azure, et puis dans mon rôle de travailleur Azure il y a un service qui lira l'enregistrement.

donc les deux utilisent la même dll pour le stockage et la récupération, cependant mon projet MVC n'a pas de problèmes pour sauvegarder l'enregistrement, mais dans mon service de rôle Ouvrier Azure quand il essaie de récupérer l'enregistrement jette l'exception quand il tente d'exécuter "table.CreateIfNotExists ();".

ne pouvait pas charger le fichier ou assembly " Microsoft.Données.OData, Version = 5.2.0.0, Culture= neutre, PublicKeyToken= 31bf3856ad364e35 " or l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assemblage. (Exception de HRESULT: 0x80131040)

j'ai déjà fait ce qui suit:

  1. mise à Jour tous les packages NuGet à partir du niveau de la solution pour les versions les plus récentes
  2. j'ai parcouru toutes les références du projet pour m'assurer que il n'y a pas de dll ancienne ou de versions précédentes, en particulier le système.Spatial, Microsoft.WindowsAzure.Configuration, Microsoft.WindowsAzure.ServiceRuntime et Microsoft.ServiceBus, Microsoft.WindowsAzure.Stockage, Microsoft.Données.Edm & Microsoft.Données.OData
  3. j'ai même créé un nouveau Service Cloud et un nouveau projet WorkerRole à partir de rien pour m'assurer que ce n'est pas quelque chose qui est cassé dans le projet WorkerRole actuel.

Je n'ai pas roulé le dll est de retour à 5.2 car j'ai eu trop de problèmes dans d'autres projets où j'utilise des fonctionnalités qui sont spécifiques à partir de 5.3.

j'exécute actuellement toutes les dll sur 5.5.

quand je lance L'AsmSpy.utilitaire exe trouvé ici, j'obtiens la sortie suivante que je ne suis pas sûr à 100% comment interpréter.

> Reference: Microsoft.Data.Edm
>         5.5.0.0 by Microsoft.Data.OData
>         5.5.0.0 by Microsoft.Data.Services.Client
>         5.5.0.0 by Microsoft.WindowsAzure.ActiveDirectory.GraphHelper.2013_04_05
> Reference: System.Spatial
>         5.5.0.0 by Microsoft.Data.OData
>         5.5.0.0 by Microsoft.Data.Services.Client Reference: Microsoft.Data.OData
>         5.5.0.0 by Microsoft.Data.Services.Client
>         5.2.0.0 by Microsoft.WindowsAzure.Storage   <-- THIS SEEMS TO BE THE ONE THAT IS CAUSING ISSUES

comment je l'interprète, c'est que le Microsoft.WindowsAzure.La dll de stockage fait référence à la Version 5.2.0.0 de Microsoft.Données.OData dll, mais comment puis-je fixer ceci, si cela est le problème? D'après la documentation que j'ai vu sur le Stockage dll est qu'il est censé référence 5.4 et, pas 5.2...?

32
demandé sur abatishchev 2013-06-04 05:24:11

5 réponses

ouvrir une question pour une question aussi facile à résoudre Ne vous aidera pas.

ajouter la configuration suivante dans vos fichiers de configuration respectifs (web.config pour le MVC et app.config pour le rôle de travail):

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Notez que runtime la section descend directement du configuration de l'élément racine! Je suis presque sûr que vous avez déjà cette section dans votre web.config, parce que MVC4 l'utilise pour rebrancher toutes les références à System.Web.MVC à la dernière version.

je personnellement, ne vous attendez pas à ce que le SDK soit mis à jour avec chaque nouvelle version de chaque bibliothèque référencée! Ce serait de la folie...

37
répondu astaykov 2013-06-04 06:31:07

j'ai eu un problème similaire mais dans ce cas il message d'exception a été;

ne pouvait pas charger le fichier ou l'assemblage 'Microsoft.Données.OData, Version = 5.5.0.0, Culture= neutre, PublicKeyToken= 31bf3856ad364e35 " or l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à la référence d'assemblage. (Exception de HRESULT: 0x80131040)

remarque qu'il était en train de charger v5.5.0.0 de la OData assemblée.

après un certain temps creuser avec ILSpy (http://www.ilspy.net) j'ai découvert que Microsoft.WindowsAzure.Le stockage 2.0.0.0 faisait explicitement référence à Microsoft.Données.OData 5.2.0.0 - que je n'avais pas car ma version était 5.5.0.0.

donc la solution était d'utiliser le Gestionnaire de paquets NuGet pour désinstaller Microsoft.WindowsAzure.Stockage, ce inturn désinstallé Microsoft.Données.OData 5.5. Puis à nouveau en utilisant le Gestionnaire de paquets NuGet, réinstaller Microsoft.WindowsAzure.Le stockage qui a permis d'identifier que il avait besoin de Microsoft.Données.OData 5.2 et installé cela aussi.

et retour à une solution de travail.

16
répondu Ben Whittle 2013-10-04 12:26:08

vous pouvez résoudre ce problème en général chaque fois que vous mettez à jour des paquets ou ajoutez de nouveaux paquets via NuGet et finir avec "ne peut pas charger le fichier ou L'assemblage..." question.

Ouvrir Console De Gestionnaire De Paquets (VS 2012 Outils/Gestionnaire de paquets de Bibliothèque/ Gestionnaire de paquets de la Console). Une fois que le shell s'ouvre pour la Console du Gestionnaire de paquets, lancez la commande:

Add-BindingRedirect

Note: soyez prudent comme L'exemple de NugGet ajout d'un " s " à la fin de leur exemple et Add-BindingRedirect n'est pas une commande valide.

le résultat est le suivant:

examine tous les assemblages dans le chemin de sortie d'un projet et ajoute la liaison redirige vers la configuration de l'application (app.config) fichier ou à la configuration web (web.config) déposer le cas échéant.

vous pouvez voir la documentation complète pour la Console du Gestionnaire de paquets à: http://nuget.codeplex.com/wikipage?title=Package%20Manager%20Console%20Command%20Reference%20(v1.3)

en plus des deux entrées que vous voyez dans la réponse d'astaykov, ce qui suit a également été ajouté pour mon projet.

  <dependentAssembly>
    <assemblyIdentity name="System.Spatial" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
  </dependentAssembly>
10
répondu eesh 2015-08-07 20:25:19

j'ai eu le même problème aujourd'hui. La seule différence que j'ai remarqué est que mon application cloud cherchait (et échouait à trouver) Microsoft.Données.OData in Version= 5.2.0.0

en utilisant Visual Studio Object Browser j'ai découvert que ma solution utilisait la bibliothèque de cet endroit:

C:\Program fichiers (x86)\Microsoft WCF Data Services\5.0\bin\.NETFramework

Microsoft.Données.OData bibliothèque résidant là était dans ver. 5.0.0.0 afin de l'écraser avec 5.2.0.0 résolu le problème.

  1. installez WCF Data Services Tools for Windows Store Apps from ici et utiliser la solution surtout.

  2. utilisez Visual Studio Object Browser pour trouver quelles versions de la bibliothèque OData sont actuellement visibles pour votre projet et où ils sont stockés. Ensuite, vous devez écraser les versions inappropriées d'eux.

1
répondu Szymon Drosdzol 2013-08-27 11:33:45

j'ai eu un problème similaire, mais je n'utilisais pas Azure et il n'y avait pas de référence codée qui pointait vers 5.2. Mais il résolu (après constatation cet article) en s'assurant que le texte dans le .svc a indiqué le bon assemblage:

<%@ ServiceHost Language="C#"
      Factory="System.Data.Services.DataServiceHostFactory,
      Microsoft.Data.Services, Version=5.6.0.0,
      Culture=neutral, PublicKeyToken=31bf3856ad364e35"

Service= " MVC4WCFDataServiceFE5.NorthWindService"%>

Notez le Version=5.6.0.0, que je n'avais pas avant.

0
répondu Scott Stafford 2014-07-24 19:39:36