No se pudo cargar el archivo o el ensamblaje Microsoft.Data.OData Version = 5.2.0.0 error en el rol de trabajador de la nube de Azure usando el almacenamiento de tablas

Tengo un problema muy peculiar al usar Azure Table Storage. Tengo un proyecto .NET 4.5 en Visual Studio 2012 donde trato con todas mis funciones de almacenamiento de tabla de Azure. Este proyecto / dll es referenciado por otros dos proyectos, mi sitio web de MVC y mi rol de trabajador de Azure. (Estoy ejecutando bajo los emuladores de Azure en mi máquina, pero también sucede cuando lo implemento en la nube)

Tengo la siguiente función que se llama cuando guardo o recupero un registro:

internal static CloudTable GetTable(CloudStorageAccount storageAccount, string tableReference) { CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); CloudTable table = tableClient.GetTableReference(tableReference); table.CreateIfNotExists(); return tableClient.GetTableReference(table.Name); } 

En mi sitio web de MVC tengo una función que guardará un registro en una tabla de almacenamiento de Azure y luego, en mi rol de trabajador de Azure, hay un servicio que leerá el registro.

Entonces, ambos usan la misma dll para almacenamiento y recuperación, sin embargo, mi proyecto MVC no tiene problemas para guardar el registro, pero en mi servicio de rol de Azure Worker cuando intenta recuperar el registro, se produce la excepción cuando intenta ejecutar “table.CreateIfNotExists () “.

No se pudo cargar el archivo o el ensamblaje ‘Microsoft.Data.OData, versión = 5.2.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ o una de sus dependencias. La definición del manifiesto del ensamblaje localizado no coincide con la referencia del ensamblaje. (Excepción de HRESULT: 0x80131040)

Ya he hecho lo siguiente:

  1. Actualización de todos los paquetes de NuGet desde el nivel de solución a las últimas versiones.
  2. Revisé todas las referencias de los proyectos para asegurarme de que no existieran versiones anteriores de dll o anteriores, en particular System.Spatial, Microsoft.WindowsAzure.Configuration, Microsoft.WindowsAzure.ServiceRuntime y Microsoft.ServiceBus, Microsoft.WindowsAzure.Storage Microsoft.Data.Edm & Microsoft.Data.OData
  3. Incluso he creado un nuevo proyecto de Cloud Service y WorkerRole desde cero para asegurarme de que no haya algo roto en el proyecto WorkerRole actual.

No he regresado las DLL a 5.2 porque tuve demasiados problemas en otros proyectos en los que utilizo funciones que son específicas a partir de 5.3.

Actualmente estoy ejecutando todos los archivos DLL en 5.5.

Cuando ejecuto la utilidad AsmSpy.exe que se encuentra aquí , obtengo el siguiente resultado que no estoy 100% seguro de cómo interpretar.

 > 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 

¿Cómo lo interpreto, es que la dll Microsoft.WindowsAzure.Storage hace referencia a la V 5.2.0.0 de la dll Microsoft.Data.OData, pero cómo soluciono esto, si este es el problema? De acuerdo con la documentación que he visto en la DLL de almacenamiento, ¿se supone que debe hacer referencia a 5.4 en adelante, no a 5.2 …?

El problema de apertura para un problema tan fácil de resolver no te ayudará.

Coloque la siguiente configuración de adición en sus respectivos archivos de configuración (web.config para el MVC y app.config para el rol de trabajador):

              

Tenga en cuenta que la sección de runtime es descendiente directa del elemento raíz de configuration . Estoy bastante seguro de que ya tiene esta sección en su web.config, porque MVC4 lo usa para volver a enlazar todas las referencias a System.Web.MVC a la última versión.

Personalmente, ¡no espero que el SDK se actualice con cada nueva versión de cada biblioteca referenciada! Esto sería una locura …

Tuve un problema muy similar pero en este caso fue un mensaje de excepción;

No se pudo cargar el archivo o el ensamblaje ‘Microsoft.Data.OData, versión = 5.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35’ o una de sus dependencias. La definición del manifiesto del ensamblaje localizado no coincide con la referencia del ensamblaje. (Excepción de HRESULT: 0x80131040)

tenga en cuenta que estaba intentando cargar v5.5.0.0 del ensamblaje de OData.

Después de investigar un poco con ILSpy ( http://www.ilspy.net ) descubrí que Microsoft.WindowsAzure.Storage 2.0.0.0 hacía referencia explícita a Microsoft.Data.OData 5.2.0.0, que no tenía como era mi versión 5.5.0.0.

Por lo tanto, la solución fue utilizar el administrador de paquetes de NuGet para desinstalar Microsoft.WindowsAzure.Storage, este progtwig desinstaló Microsoft.Data.OData 5.5. Luego, nuevamente usando el administrador de paquetes de NuGet, reinstale Microsoft.WindowsAzure.Storage que identificó que necesitaba Microsoft.Data.OData 5.2 e instaló eso también.

y de vuelta a una solución de trabajo.

Puede resolver este problema en general siempre que actualice paquetes o agregue paquetes nuevos a través de NuGet y termine con los problemas de “No se pudo cargar el archivo o el ensamblaje …”.

Abra la Consola del Administrador de paquetes ( VS 2012 Tools / Library Package Manager / Consola del Administrador de paquetes ). Una vez que el shell se abre para la Consola del administrador de paquetes, ejecute el comando:

Add-BindingRedirect

Nota: tenga cuidado ya que el ejemplo de NugGet agregó una ‘s’ al final en su ejemplo y Add-BindingRedirect no es un comando válido.

Esto hace lo siguiente:

Examina todos los ensamblajes en la ruta de salida de un proyecto y agrega redirecciones de enlace al archivo de configuración de la aplicación (app.config) o al archivo de configuración web (web.config) donde sea necesario.

Puede ver la documentación completa de la Consola de Package Manager en: http://nuget.codeplex.com/wikipage?title=Package%20Manager%20Console%20Command%20Reference%20(v1.3)

Además de las dos entradas que ve en la respuesta de astaykov, también se agregó lo siguiente para mi Proyecto.

      

Tuve un problema similar hoy. La única diferencia que detecté es que mi aplicación en la nube estaba buscando (y no pudo encontrar) Microsoft.Data.OData en la Versión = 5.2.0.0

Usando Visual Studio Object Browser, descubrí que mi solución usaba la biblioteca de esa ubicación:

C: \ Archivos de progtwig (x86) \ Microsoft WCF Data Services \ 5.0 \ bin \ .NETFramework

La biblioteca Microsoft.Data.OData que reside allí estaba en ver. 5.0.0.0 por lo que sobrescribirlo con 5.2.0.0 resolvió el problema.

PS instalé las herramientas de WCF Data Services Tools para las aplicaciones de la Tienda Windows con la esperanza de resolver este problema para que su aplicación lo obtenga de otra fuente. Si ese es el caso tienes dos opciones:

  1. Instale las herramientas de WCF Data Services Tools para Windows Store desde aquí y use la solución anterior.

  2. Use el Visual Studio Object Browser para encontrar qué versiones de la biblioteca OData están actualmente visibles para su proyecto y dónde están almacenadas. Luego necesitas sobrescribir las versiones impropias de ellos.

También tuve un problema similar, pero no estaba usando Azure y no había ninguna referencia codificada que apuntaba a 5.2. Pero se resolvió (después de encontrar este artículo ) asegurándose de que el texto en el .svc señalaba el ensamblaje correcto:

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

Servicio = "MVC4WCFDataServiceFE5.NorthWindService"%>

Tenga en cuenta la versión = 5.6.0.0 , que no tenía antes.

Intereting Posts