asp.net-mvc json.net nuget visual-studio-2013 asp.net-mvc-5.1

¿Cómo puedo solucionar los conflictos de la versión del ensamblado con JSON.NET después de actualizar las referencias del paquete NuGet en un nuevo proyecto ASP.NET MVC 5?



asp.net-mvc visual-studio-2013 (8)

Creé un nuevo proyecto web ASP.NET MVC 5 en VS 2013 (Actualización 1) y luego actualicé todos los paquetes NuGet. Cuando construyo el proyecto, recibo la siguiente advertencia:

Advertencia MSB3243: No hay forma de resolver el conflicto entre "Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" y "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed".

Sin embargo, cuando reviso web.config, veo que hay un redireccionamiento vinculante:

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

Que es exactamente lo que aconseja la advertencia.

¿Cómo puedo solucionar esta advertencia?


La solución final para su ensamblaje redirigir los errores

De acuerdo, con suerte, esto debería ayudar a resolver cualquier discrepancia de referencia de ensamblaje (sana) ...

  1. Verifica el error.

  1. Compruebe web.config después de la asamblea redirigir. Crea uno si no existe.

  1. Haga clic con el botón derecho en la referencia para el ensamblaje y elija Propiedades.

  1. Compruebe la versión (no la versión en tiempo de ejecución) en la tabla de propiedades. Entendido.

  1. Pegue en el atributo newVersion.

  1. Para mayor comodidad, cambie la última parte de la versión anterior a algo alto, redondo e imaginario.

Alegrarse.


Actualicé mi paquete e incluso lo reinstalé, pero todavía recibía exactamente el mismo error que el PO mencionado. Edité manualmente el dll referenciado haciendo lo siguiente.

Eliminé newtonsoft.json.dll de mi referencia, luego eliminé manualmente el archivo .dll del directorio del contenedor. Luego, manualmente copié el archivo newtonsoft.json.dll de la carpeta del paquete nuget en el contenedor del proyecto, luego agregué la referencia al examinar el archivo .dll.

Ahora mi proyecto se construye de nuevo.


Aquí los pasos que utilicé para arreglar la advertencia:

  • Descargar proyecto en VS
  • Editar archivo .csproj
  • Busque todas las referencias al ensamblaje de Newtonsoft.Json
    • Encontré dos, uno a v6 y uno a v5
    • Reemplace la referencia a v5 con v6
  • Recargar proyecto
  • Generar y observar falla de referencia de ensamblaje
  • Ver referencias y ver que ahora hay dos para Newtonsoft.Json. Elimine el que no se puede resolver.
  • Reconstruir: sin advertencias

Encontré que eliminar esta sección del archivo del proyecto corrige el problema.

<ItemGroup> <Reference Include="Newtonsoft.Json"> <HintPath>../packages/Newtonsoft.Json.6.0.1/lib/net45/Newtonsoft.Json.dll</HintPath> </Reference>


Recuerde que con la redirección de enlace

oldVersion = "0.0.0.0-6.0.0.0"

Usted dice que las versiones anteriores de la DLL están entre la versión 0.0.0.0 y la versión 6.0.0.0.


Si ninguno de los anteriores funciona, intente usar esto en web.config o app.config:

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime>


Tuve este problema porque actualicé paquetes, que incluían Microsoft.AspNet.WebApi que tiene una referencia a Newtonsoft.Json 4.5.6 y ya tenía instalada la versión 6. No fue lo suficientemente inteligente como para usar la versión 6.

Para resolverlo, después de la actualización de WebApi, abrí Tools> NuGet Package Manager> Pacakge Manager Console y ejecuté:

Update-Package Newtonsoft.Json

El registro mostró que las versiones 6.0.x y 4.5.6 se actualizaron todas a la última y todo estuvo bien.

Tengo la sensación de que esto volverá a surgir.


Tuve un problema similar y solo quería publicar una respuesta para otros en mi situación.

Tengo una solución que ejecuta una aplicación web ASP.NET con muchos otros proyectos lib de clase C #.

Mi aplicación web ASP.NET no estaba usando json, pero otros proyectos en donde.

Así es como lo arreglé:

  1. Me aseguré de que todos los proyectos usaran la última versión (6) usando NuGet Update en todos los proyectos que actualmente usan cualquier versión de json; esto no solucionó el problema.
  2. Agregué json a la aplicación web usando NuGet - esto solucionó el problema (déjame profundizar en por qué):

El paso 2 fue ante todo agregar una información de configuración para json, que sugiere que todos los proyectos utilicen la última versión (6) sin importar la versión que tengan. Agregar el enlace de ensamblaje a Web.Config es probablemente la solución.

Sin embargo, el paso 2 también limpió el código de algunos legacy. Resultó que previamente habíamos usado una versión anterior (5) de json en nuestra aplicación web y las carpetas NuGet no se eliminaron cuando se eliminó la referencia (sospecho: manualmente). Al agregar la última json (6), se eliminaron las carpetas antiguas (json v5). Esto también podría ser parte de la solución.