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, Versión = 6.0.0.0, Cultura = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" y "Newtonsoft.Json, Versión = 4.5.0.0, Cultura = neutral, PublicKeyToken = 30ad4fe6b2a6aeed".
Sin embargo, cuando reviso web.config, veo que hay una redirección vinculante en su lugar:
<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?
Respuestas:
Aquí los pasos que utilicé para corregir la advertencia:
fuente
install.ps1
Tuve este problema porque actualicé los 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í Herramientas> Administrador de paquetes NuGet> Consola del administrador de Pacakge y ejecuté:
Update-Package Newtonsoft.Json
El registro mostró que las versiones 6.0.xy 4.5.6 se actualizaron a la última versión y todo estaba bien.
Tengo la sensación de que esto volverá a surgir.
fuente
Encontré eliminar esta sección del archivo del proyecto para solucionar el problema.
<ItemGroup> <Reference Include="Newtonsoft.Json"> <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference>
fuente
Si nada de lo anterior 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>
fuente
Actualicé de Newtonsoft.Json 11.0.1 a 12.0.2. Al abrir el archivo del proyecto en Notepad ++, descubrí tanto
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference>
y
<ItemGroup> <Reference Include="Newtonsoft.Json"> <HintPath>..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> </Reference> </ItemGroup>
Eliminé ItemGroup que envuelve la referencia con la ruta de la pista a la versión 11.0.1.
Estos problemas pueden ser increíblemente frustrantes de encontrar. Además, los desarrolladores suelen seguir los mismos pasos que las configuraciones de proyectos anteriores. Las configuraciones anteriores no encontraron el problema. Por alguna razón, el archivo del proyecto ocasionalmente se actualiza incorrectamente.
Desearía desesperadamente que Microsoft solucionara estos problemas del infierno de DLL de estudio visual para que no aparezcan. Ocurre con demasiada frecuencia y hace que el progreso se detenga hasta que se solucione, a menudo mediante prueba y error.
fuente
La solución final a los errores de redireccionamiento de su ensamblaje
De acuerdo, con suerte esto debería ayudar a resolver cualquier (sana) discrepancia de referencia de ensamblaje ...
Alegrarse.
fuente
Recuerda que con la redirección vinculante
Está diciendo 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.
fuente
oldVersion
En realidad, es un nombre poco apropiado aquí, lo que está diciendo es que su ensamblado / exe se creó con una referencia a una versión en el rango0.0.0.0-6.0.0.0
y que la versión realmente instalada (y preferida) es el valor debajonewVersion
(la versión anterior estaría mejor redactada como "versión esperada" y la nueva versión estaría mejor redactada como "versión real disponible")Nadie mencionó lo siguiente, que a mi entender es la solución correcta:
Vaya al csproj del proyecto donde está instalado el nuget y establezca
AutoGEneratedBindingRedirects
enfalse
.<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
Artículo completo en MSDN.
fuente
Actualicé mi paquete e incluso lo reinstalé, pero todavía recibía exactamente el mismo error que el OP mencionado. Edité manualmente el dll referenciado haciendo lo siguiente.
Eliminé el newtonsoft.json.dll de mi referencia, luego eliminé manualmente el .dll del directorio bin. Luego copié manualmente el newtonsoft.json.dll de la carpeta del paquete nuget en el contenedor del proyecto, luego agregué la referencia navegando en el archivo .dll.
Ahora mi proyecto se vuelve a construir.
fuente
Tuve un problema similar y solo quería publicar una respuesta para otras personas en mi situación.
Tengo una solución que ejecuta una aplicación web ASP.NET con varios otros proyectos de biblioteca de clase C #.
Mi aplicación web ASP.NET no estaba usando json, pero otros proyectos donde.
Así es como lo arreglé:
El paso 2 fue, en primer lugar, agregar una información de configuración para json, que sugiere que todos los proyectos usen la última versión (6) sin importar la versión que tengan. Lo más probable es que agregue el enlace de ensamblado a Web.Config.
Sin embargo, el paso 2 también limpió algunos códigos heredados. Resultó que anteriormente habíamos usado una versión anterior (5) de json en nuestra aplicación web y las carpetas de NuGet no se eliminaron cuando se eliminó la referencia (sospecho: manualmente). Agregando el último json (6), eliminó las carpetas antiguas (json v5). Esto también podría ser parte de la solución.
fuente
Veverke mencionó que es posible deshabilitar la generación de redirecciones vinculantes estableciendo AutoGEneratedBindingRedirects en falso. No estoy seguro si es algo nuevo desde que se publicó esta pregunta, pero hay una opción "Omitir la aplicación de redireccionamientos vinculantes" en Herramientas / Opciones / Administrador de paquetes Nuget, que se puede alternar. De forma predeterminada, está desactivado, lo que significa que se aplicarán las redirecciones. Sin embargo, si hace esto, tendrá que administrar manualmente los redireccionamientos de enlace necesarios.
fuente