2012-07-11 12 views
5

Estoy jugando con mi proyecto mvc.Haciendo referencia a diferentes versiones de Json.NET dll

  1. I Nugeted un paquete llamado SocialAuth.Net en el proyecto, que a su vez utiliza Newtonsoft.Json.dll 4.0.0.0 (mayores) como una de sus dependencias.

  2. Luego porque también necesitaba Json.Net, quería una versión más nueva, So I Nugeted Json.NET, que tiene una versión más reciente 4.5.0.0 (más reciente).

Entonces ocurre el problema. En mi punto de vista de afeitar "ViewBag.Title = ...." se ha subrayado rojo que dice:

Warning 1 c:\users\admin\documents\visual studio 2010\Projects\WebApp\WebApp\Views\Home\Index.cshtml: ASP.NET runtime error: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Esta es la parte de mi web.config JSON:

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

Así,

  1. Fui a Referencias, revisé y encontré que Newtonsoft.Json era 4.0.0.0 (probablemente vino con SocialAuth.Net), y lo borré, y agregué la referencia 4.5.0.0 que obtuve de Nuget.

  2. Entré en la carpeta WebApp/bin/debug/y eliminé todo, y luego reconstruí el proyecto.

Sin embargo, una vez que vuelve a generar la aplicación de web, el Newton.Json 4.0.0.0 vuelve a entrar en bin/debug/sin importar cómo me refiero manualmente a la nueva Nuget 4.5.0.0. y el mismo error regresa. Estoy atascado.

¿Tienes idea de cómo lidiar con este problema de dll? Gracias.

EDITAR -----------------------------------

Después de un poco de pensamiento, Entiendo que es porque primero Json.Net (newer 4.5) está vinculado primero, luego el anterior viene después cuando se construye. Entonces, el más viejo sobrescribe el más nuevo.

No estoy muy familiarizado con la instalación de GAC, pero sé que podría abrir esa lata de gusanos e instalar 2 versiones allí, lo que no quiero, porque eso significa que tengo que hacer eso en cada máquina que implemente. aplicación ¿Hay alguna manera de jugar con web.config y solucionar esto?

+0

oldVersion = "0.0.0.0-4.5.0.0" debe ser oldVersion = "0.0.0.0-4.0.0.0" – user516883

Respuesta

0

Puede intentar instalar el paquete SocialAuth.Net con el indicador ‑IgnoreDependencies, luego instalar las dependencias manualmente y asegurarse de que solo instala la última versión de la biblioteca Json.Net.

Luego, en tiempo de ejecución, el paquete SocialAuth.Net respetaría la redirección de ensamblaje y cargaría Json.Net (v4.5) en lugar de la versión anterior.

+0

Probado justo ahora. El comando "-IgnoreDependencies" no parece hacer nada en el paquete. Simplemente sobrescribe la nueva versión Json.Net 4.5 con su 4.0 de todos modos. – Tom

+1

¿Desinstaló primero los paquetes en cuestión? Si es posible, desinstale primero todos los paquetes y luego instálelos nuevamente con el interruptor. Nunca utilicé eso particularmente, pero de los documentos no debería hacer lo que describiste. –

+0

Comencé todo de nuevo. Confirmado que SocialAuth.Net ignoró el comando "-IgnoreDependencies", trajo sus propias dependencias con una nueva descarga. Luego sobrescribí mis dependencias más nuevas con las antiguas. siendo Json.Net y log4net .... También noté que si voy a la interfaz de usuario del administrador de Nuget y verifico las dependencias de SocialAuth.Net bajo su descripción, dice "nulo". ¿Puede ser SocialAuth.Net no asoció sus dependencias con Nuget y/o lo conectó de alguna manera? – Tom

Cuestiones relacionadas