asp.net - net - No se pudo cargar el archivo o el ensamblaje ''Newtonsoft.Json, Versión=4.5.0.0, Cultura=neutral, PublicKeyToken=30ad4fe6b2a6aeed''
no se puede cargar el archivo o ensamblado system net http formatting (30)
Estoy recibiendo el error
System.IO.FileLoadException: No se pudo cargar el archivo o conjunto ''Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed'' 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)
para mi compilación de CI
Solución que probé
<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>
Tampoco funcionó
A continuación la sección agregue a su web.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>
Cerrar la solución.
Abra packages.config
y *.csproj
con editor de texto y elimine cualquier línea que tenga Newtonsoft.Json
Ex:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>../packages/Newtonsoft.Json.9.0.1/lib/net40/Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>
O <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
Abra la solución de nuevo y vuelva a instalar Newtonsoft.Json con Install-Package Newtonsoft.Json
Funciona para mi.
Cometí el error de agregar un archivo .dll de NewtonSoft para .Net 4.5.
Mi proyecto principal era 4.5, pero cuando agregué un proyecto adicional a mi solución, extrañamente lo agregué como un proyecto .Net 2.0 ... y cuando intenté usar los 4.5 dll de NewtonSoft con esto, obtuve este "Newtonsoft.Json no pudo no se encuentra "error.
La solución (por supuesto) fue cambiar este nuevo proyecto de .Net 2.0 a 4.5.
Creo que estás apuntando al objetivo equivocado, cámbialo a 4.5 en lugar de 6.0
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
Esto debería funcionar.
Debe actualizar el archivo web.config en el servidor. Cuando nuget instala NewtonSoft actualiza este archivo incluyendo este código
<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>
Elimine el ensamblaje Newtonsoft.Json de la referencia del proyecto y agréguelo nuevamente. Probablemente borró o reemplazó el dll por accidente.
En la consola del administrador de paquetes, ejecute: Update-Package –reinstall Newtonsoft.Json
.
ACTUALIZAR
Originalmente publiqué esto como un comentario, pero como @OwenBlacker sugirió, lo pondré aquí:
Si aún recibe un error después de hacer esto, lo que finalmente funcionó para mí es que eliminé la sección <dependentAssembly>
de .config
mi archivo .config
. Reinstalar lo recupera si no está allí y, al parecer, necesitas eliminarlo. Hasta que haya una solución normal en el paquete, me temo que este paso manual es una necesidad.
Nota: por favor lea los comentarios a continuación antes de hacer esto.
Según el comentario de René a continuación, TENGA CUIDADO de que el comando publicado en la respuesta volverá a instalar el paquete en cada proyecto de su solución. Entonces, si usa el paquete Newtonsoft.Json en varios proyectos y tal vez usa versiones diferentes, solo ejecutar el comando anterior podría tener consecuencias no deseadas.
En mi caso, después de descargar el ensamblaje y agregar la referencia al proyecto, resolví esto "desbloqueando" la DLL antes de agregar la referencia al proyecto.
Con el explorador de Windows, vaya a la ubicación de la DLL, haga clic con el botón derecho en la DLL y luego seleccione ''propiedades''. Encontrará un botón ''desbloquear'' en una de las pestañas y luego puede agregar la referencia y el ensamblaje se cargará correctamente.
En mi caso, el proyecto principal seguía haciendo referencia a una versión anterior de Newtonsoft.Json que ya no existía en el proyecto (se muestra con un signo de exclamación amarillo). Al eliminar la referencia se resolvió el problema, no era necesario bindingRedirect.
Estaba escribiendo un cliente de servicio REST de WebApi, por lo que, para mí, este error se debió al agregar Referencias a System.Net.Http
y System.Net.Http.Formatting
ensamblajes manualmente a través de Agregar referencia, cuando debería haber agregado Microsoft.AspNet.WebApi.Client
Paquete Microsoft.AspNet.WebApi.Client
través de NuGet . Vea también esta respuesta a otra pregunta .
Haga clic con el botón derecho en su proyecto, seleccione administrar paquetes de Nuget, escriba newtonsoft en el cuadro de búsqueda e instale la última versión. Entonces ejecuta tu aplicación
He pasado un par de días tratando de resolver este problema frustrante. He intentado casi todo lo que se puede encontrar en la web. Finalmente, descubrí que este error podría ser causado (como en mi caso) por las diferentes versiones del proyecto .Net de destino (4.5 y 4.5.1) en una solución. Los pasos abajo me lo arreglaron:
- Verifique la versión .Net de cada proyecto que esté en su solución. Simplemente haga clic derecho en el proyecto y vaya a
Properties
.
Si es posible, configure la misma versión .Net para todos los proyectos. Si no, al menos, intente cambiar el proyecto de inicio (para mí, este fue el que causó los problemas).
Elimine todos los paquetes
Newtonsoft.Json
de la solución.uninstall-package newtonsoft.json -force
Actualice todas
Newtonsoft.Json
versiones deNewtonsoft.Json
en todos los archivospackages.config
, como así<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
Reinstale
Newtonsoft.Json
desde "Package Manager Console" con:install-package newtonsoft.json
Reconstruir la solución
(Opcional) 7. Si cambió el proyecto de Inicio, devuélvalo de nuevo
Me enfrenté al mismo error y luché con él durante horas. Tuve un proyecto de API web que utiliza Newtonsoft.json y otro proyecto UnitTest para el proyecto de API web. El proyecto de prueba de unidad también necesitaba la referencia de Newtonsoft.json. Pero al agregar el enlace obtuve la excepción anterior.
Finalmente lo resolví agregando el siguiente fragmento de código en el archivo app.config del proyecto de prueba de unidad:
<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>
Nada de lo de arriba me ayudó, pero lo que realmente lo solucionó es lo siguiente:
- Elimine todos los enlaces de dependencia en app.config (de todos los archivos app.config en la solución)
- Ejecute el siguiente comando desde "Package Manager Console"
Get-Project -Todos | Add-BindingRedirect
- Reconstruir
Referencia: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx
No tuve suerte con ninguna de las soluciones presentadas aquí (desinstalación, reinstalación, eliminación de referencias, creación de Redireccionamientos de enlace, etc.) Tuve que volver a una versión anterior de Newtonsoft. La versión 5.0.6 había estado trabajando antes, así que probé esa. Tuve que ingresar estos dos comandos en la consola del paquete:
uninstall-package newtonsoft.json -force
install-package newtonsoft.json -version "5.0.6"
Se -force
opción -force
en el primer comando para forzar la desinstalación. Las dependencias con otros ensamblajes impiden la desinstalación sin él.
Normalmente, agregar la redirección de enlace debería resolver este problema, pero no funcionó para mí. Después de unas horas de golpear mi cabeza contra la pared, me di cuenta de que había un atributo xmlns que causaba problemas en mi web.config. Después de eliminar el atributo xmlns del nodo de configuración en Web.config, las redirecciones de enlace funcionaron como se esperaba.
Otro problema insidioso es que parece que las redirecciones de enlace pueden fallar silenciosamente si el elemento tiene una configuración incorrecta en cualquier otro elemento dependiente de Ensamblaje.
Asegúrese de que solo tiene un elemento debajo de cada elemento.
En algunos casos, VS genera esto:
<dependentAssembly>
<assemblyIdentity ...
<assemblyIdentity ...
</dependentAssembly>
En lugar de
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
Me tomó mucho tiempo darme cuenta de que este era el problema!
Para todos los que tengan problemas con la versión Newtonsoft.Json v4.5, 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>
IMPORTANTE : verifique que la etiqueta de configuration
de su archivo de configuración no tenga ningún atributo de espacio de nombres (como se sugiere en https://.com/a/12011221/150370 ). De lo contrario, las etiquetas assemblyBinding
serán ignoradas.
Si el error desaparece localmente y aún aparece en el servidor, la solución que funciona conmigo es eliminar la carpeta bin y packages.config y web.config y volver a cargar estos archivos
Si utiliza varios proyectos en la misma solución y biblioteca de la otra comprobación, todos los proyectos tienen la misma versión de Newtonsoft.Json
Solo verifica la versión de las propiedades de Newtonsoft.Json Newtonsoft
Entonces necesita agregar esa versión en su configuración web (en mi caso 8.0.0.0) configuración web
Solucioné el problema al agregar este enlace redireccionamiento a mi archivo .config:
<runtime>
. . .
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
El mensaje de error se queja de no encontrar la versión 4.5.0.0, la versión actual de Newtonsoft.Json es 6.0.0.0, por lo que la redirección debe ir de 4.5 a 6.0, no viceversa
Tengo el mismo tipo de problema. Y también lo resolví haciendo lo siguiente: Vaya a HERRAMIENTAS > NuGet Package Manager y seleccione Package Manager Console . Finalmente, ejecute los siguientes dos comandos :)
- desinstalar el paquete newtonsoft.json -force
- paquete de instalación newtonsoft.json
Tiene 2 versiones diferentes de la biblioteca JSON.NET en su solución. Para solucionar esto debes actualizarlos a la última versión. Sigue estos pasos:
1-Open solution explorer 2-Haga clic derecho en el nombre de la solución 3-Seleccione Administrar paquetes de Nuget para la Solución 4-Seleccione Actualizaciones del menú 5-Actualizar el paquete JSON.NET
Esto resolverá su problema.
Tuve exactamente el mismo problema con la versión 7.0.0.0, y la lib que me causó el problema fue Microsoft.Rest.ClientRuntime que de alguna manera se refería a la versión incorrecta (6.0.0.0) de Newtonsoft.json, a pesar de la correcta gestión de dependencias en nugget ( se instaló la versión correcta de newtonsoft.json (7.0.0.0)).
Resolví esto aplicando la redirección anterior de 6.0.0.0 a 7.0.0.0 (de Kadir Can) en el archivo de configuración:
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />
----> Después de unos días sin cambiar nada, volvió a aparecer con el mismo error. Instalé la versión 6.0.0.0 n la actualicé a 7.0.0.0, ahora funciona bien.
Tuvimos exactamente el mismo problema que mencionaste. Estamos usando nunit para ejecutar pruebas a través de CI, y tenemos a nunit ejecutando un archivo llamado tests.nunit, que describe una lista de los dispositivos de prueba dll que se ejecutarán.
Cada dispositivo de prueba tenía su propio archivo de configuración, pero cuando se ejecuta a través del archivo "tests.nunit", las redirecciones de enlace parecen ignorarse. La solución fue agregar las redirecciones de enlace a un nuevo archivo de configuración, "tests.config" que estaba al lado del archivo "tests.nunit".
El punto clave es hacer referencia a la versión correcta en su archivo de configuración.
Pasos;
1- Mira cuál es la versión de tu Newtonsoft.Json.dll en la propiedad de referencia del proyecto, cualquiera que sea la versión en la carpeta de tu paquete (por ejemplo, la mía es 7.0.1 y la versión de referencia es 7.0.0.0)
2- Mira lo que el proyecto espera de ti en la excepción (el mío es 6.0.0.0)
3- Agrega un ensamblado dependiente a tu archivo de configuración como debería ser ...
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
Implementar la versión correcta en la máquina CI
Esto le indica que el cargador de ensamblajes encontró una versión diferente del ensamblado Newtonsoft.Json
, que no coincide con la referencia que creó en su proyecto. Para cargar el ensamblaje correctamente, debe implementarlo lado a lado con su código compilado o instalar la versión correcta del ensamblaje en la máquina de destino (es decir, en la GAC).
Alternativa: asegúrese de que la configuración está en el archivo correcto
Si desea mantener la solución actual y cargar un ensamblaje con una versión diferente, asegúrese de que la configuración que publicó esté en el archivo .config
correcto. Recuerde que no hay xpto.dll.config
, una DLL cargada por una aplicación siempre usa el archivo de configuración de la aplicación en ejecución.
<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="7.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
Funciona para mí ... solo ponga la versión que está usando en newVersion ie (newVersion = "7.0.0.0")
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
Hizo el truco para mí :)