No se pudo cargar el archivo o ensamblado 'Newtonsoft.Json, Versión = 4.5.0.0, Cultura = neutral, PublicKeyToken = 30ad4fe6b2a6aeed'

233

Recibo el error

System.IO.FileLoadException: no se pudo cargar el archivo o ensamblado 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' o una de sus dependencias. La definición de manifiesto del ensamblado ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)

para mi construcción 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ó

usuario3437755
fuente
El error significa que .NET no pudo encontrar la biblioteca Json.NET . ¿Lo tienes instalado?
TypeIA
22
Exactamente el mismo problema, volviéndome loco. Avíseme si encuentra una solución
Dean Chalk
En realidad, para mí agregar lo que intentaste resolvió el problema.
h.alex 01 de
Use la opción de consolidación en el administrador de paquetes NuGet para asegurarse de que las versiones no se separen.
niico
Esto es lo único que funcionó para mí: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

Respuestas:

237

En la consola de administrador de paquetes ejecutar: Update-Package –reinstall Newtonsoft.Json.

ACTUALIZAR

Originalmente publiqué esto como un comentario, pero como @OwenBlacker sugirió que lo pondré aquí:

Si aún recibe un error después de hacer esto, lo que finalmente funcionó para mí es que eliminé la <dependentAssembly>sección de Json.Net de mi .configarchivo. Reinstalar lo trae de vuelta si no está allí y aparentemente necesita eliminarlo. Hasta que haya una solución normal en el paquete en sí, me temo que este paso manual es imprescindible.

Nota: Lea los comentarios a continuación antes de hacer esto.

Según el comentario de René a continuación, TENGA EN CUENTA que el comando publicado en la respuesta reinstalará el paquete en cada proyecto de su solución. Entonces, si usa el paquete Newtonsoft.Json en varios proyectos y tal vez usa diferentes versiones, solo ejecutar el comando anterior podría tener consecuencias no deseadas.

bobah75
fuente
77
Por el bien de todos los que leen esto: lo he hecho y aún tengo el error. Luego lo resolví de alguna manera: Sorprendentemente, tuve que eliminar la <dependentAssembly>sección de Json.Net de mi .configarchivo. Reinstalar lo trae de vuelta si no está allí y aparentemente necesita eliminarlo. Hasta que haya una solución normal en el paquete en sí, me temo que este paso manual es imprescindible.
Ofer Zelig
@OferZelig Debería publicar eso como una respuesta por separado, para que pueda obtener los votos positivos (y, lo que es más importante, una mayor atención). No menos importante porque también funcionó para mí :)
Owen Blacker
@OwenBlacker gracias. Pero debido a que ya hay muchas respuestas, la mía se perderá. Y esta respuesta es bastante buena, es solo que si no funciona, entonces mi comentario la "completa". ¿Sabes que? Supongo que solo editaré la respuesta original. Más importante que ganar reputación propia.
Ofer Zelig
43
TENGA EN CUENTA que el comando publicado en la respuesta reinstalará el paquete en cada proyecto de su solución. Entonces, si usa el paquete Newtonsoft.Json en varios proyectos y tal vez usa diferentes versiones, solo ejecutar el comando anterior podría tener consecuencias no deseadas.
René
Resuelto! Para mí, tenía v6 instalado en un proyecto, reinstalarlo desde el administrador de paquetes lo llevó a v7.
jv-dev
123

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 configurationetiqueta de su archivo de configuración no tenga atributos de espacio de nombres (como se sugiere en https://stackoverflow.com/a/12011221/150370 ). De lo contrario, las assemblyBindingetiquetas serán ignoradas.

ZeroDotNet
fuente
3
Para mí, eliminar el contenido de la carpeta bin manualmente después de la limpieza (que no lo vacía) fue el truco después de aplicar esta respuesta.
Mikaël Mayer
¡Mil gracias por esto! :)
Kamron K.
¡Funciona genial! A partir del 7/4/15, la versión actual de Newtonsoft.Json es 7.0.0, por lo que newVersion="6.0.0.0"debe cambiarse a la newVersion="7.0.0.0"versión que esté utilizando o sea la que esté utilizando
Moses Machua
3
Esa nota en el espacio de nombres ... podría abrazarte. Quemé horas en esto sin saber que las redirecciones vinculantes se ignoraban por eso.
Brian
1
La nota sobre el espacio de nombres es tan importante que podría ser una respuesta por sí misma. Muchas gracias.
beawolf
42

El punto clave es hacer referencia a la versión correcta en su archivo de configuración.

Pasos;

1- mire cuál es la versión de su Newtonsoft.Json.dll en la propiedad de referencia del proyecto, independientemente de la versión en la carpeta de su 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 (la mía es 6.0.0.0)

3- Agregue ensamblaje dependiente a su 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>
Kadir Can
fuente
Lo siento, solo puedo dar un voto a su punto (por ejemplo, el mío es 7.0.1 y la versión de referencia es 7.0.0.0) hizo una gran diferencia. Hubiera dado más ..... Gracias :)
Zaker
Esto funcionó para mí. Actualicé la versión a 7, pero realmente estaba ejecutando la versión 8, así que cambié la nueva versión a 8.0, ¡gracias!
Keith
Aunque instale 8.0.3 (como dice en el administrador de paquetes nuget), el .dll bajo referencias sigue siendo 8.0.0. Así que cambié a 8.0.0.0 en mi web.config. Extraño cómo funcionó ayer cuando publiqué todo y esta mañana ya no funciona.
CularBytes
24

No tuve suerte con ninguna de las soluciones presentadas aquí (desinstalar, reinstalar, eliminar referencias, crear enlaces vinculantes, etc.) Tuve que volver a una versión anterior de Newtonsoft. La versión 5.0.6 había estado funcionando 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 -forcerequiere la opción en el primer comando para forzar la desinstalación. Las dependencias con otros ensamblados impiden la desinstalación sin ella.

Karl Hoaglund
fuente
Trabajado como un encanto. Tenía el error en mi proyecto MVC 4. Casi cambió al serializador nativo.
Kees C. Bakker
gracias, solo necesitaba cambiar -version "5.0.6" a -pre: install-package newtonsoft.json -pre
thiago.adriano26
22

Solucioné el problema al agregar esta redirección de enlace 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.

MiMo
fuente
Sí, esto resolvió mi problema. Tan extraño es la cantidad de problemas que causa JSON.NET ... pero una vez que desaparece es una máquina de ensueño. Gracias +1
Piotr Kula
Su fragmento de código me hizo darme cuenta de que faltaba el elemento 'assemblingBinding'. Gracias
Riga
21

Creo que está apuntando al objetivo equivocado, cámbielo 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.

BrunoLM
fuente
1
Umbraco 7 requirió 4.5.0.0, por lo que esto ayudó a ponerlo en funcionamiento
MagicalArmchair
19

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 de proyecto .Net de destino (4.5 y 4.5.1) en una solución. Los pasos a continuación lo arreglaron para mí:

  1. Verifique la versión .Net de cada proyecto que esté en su solución. Simplemente haga clic derecho en proyecto y vaya a Properties.

ingrese la descripción de la imagen aquí

  1. 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).

  2. Retire todos los Newtonsoft.Jsonpaquetes de la solución.

    uninstall-package newtonsoft.json -force

  3. Actualice todas las Newtonsoft.Jsonversiones en todos los packages.configarchivos, así

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. Reinstale Newtonsoft.Jsondesde "Package Manager Console" con:

    install-package newtonsoft.json

  5. Reconstruir la solución.

(Opcional) 7. Si cambió el proyecto de inicio, devuélvalo nuevamente

ekostadinov
fuente
12
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

Hizo el truco para mí :)

Chiranjeeb
fuente
1
Esto también me sirvió. actualizó automáticamente el archivo webconfig a la versión correcta.
Shaakir
Yo también, esto realmente ayudó.
Mike Malter
11

si utiliza varios proyectos en la misma solución y la biblioteca de la otra, compruebe si todos los proyectos tienen la misma versión de Newtonsoft.Json

Fatih
fuente
Este fue mi problema. Muy frustrante pasar por todas las respuestas anteriores y no obtener resultados. Finalmente lo descubrí cuando me molesté en verificar la versión de .dll en mi carpeta Build.
10

Retire el ensamblaje Newtonsoft.Json de la referencia del proyecto y agréguelo nuevamente. Probablemente eliminó o reemplazó el archivo DLL por accidente.

Helb
fuente
Este enfoque funciona contra un proyecto de iOS de Xamarin Forms en el que solté el paquete NuGet y lo volví a agregar. Gracias.
El senador
9

Estaba escribiendo un cliente de servicio REST de WebApi, por lo que para mí este error fue causado al agregar referencias System.Net.Httpy System.Net.Http.Formattingensamblajes manualmente a través de Agregar referencia, cuando debería haber agregado el Microsoft.AspNet.WebApi.Clientpaquete a través de NuGet . Vea también esta respuesta a otra pregunta .

mschwaig
fuente
8

Tiene 2 versiones diferentes de la biblioteca JSON.NET en su solución. Para resolver esto, debe actualizarlos a la última versión. Sigue estos pasos:

1-Abra el explorador de soluciones 2-Haga clic derecho en el nombre de la solución 3-Seleccione Administrar paquetes Nuget para la solución 4-Seleccione Actualizaciones del menú 5-Actualice el paquete JSON.NET

Esto resolverá tu problema.

enlace: No se pudo cargar el archivo o ensamblado 'Newtonsoft.Json, Versión = 7.0.0.0, Cultura = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' o una de sus dependencias

mohammad
fuente
La forma más fácil y segura de solucionar este problema. Gracias @mohammad
deanwilliammills
7

Implemente la versión correcta en la máquina CI

Esto le indica que el cargador de ensamblaje encontró una versión diferente del Newtonsoft.Jsonensamblado, que no coincide con la referencia que creó en su proyecto. Para cargar el ensamblaje correctamente, debe implementar el ensamblado junto con su código compilado o instalar la versión correcta del ensamblaje en la máquina de destino (es decir, en el GAC).

Alternativa: asegúrese de que la configuración esté en el archivo correcto

Si desea conservar 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 .configarchivo correcto . Recuerde que no existe xpto.dll.config, una DLL cargada por una aplicación siempre usa el archivo de configuración de la aplicación en ejecución.

Miguel angelo
fuente
6

Normalmente, agregar la redirección de enlace debería resolver este problema, pero no me funcionó. Después de unas horas de golpearme la 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.

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx

David Paquette
fuente
5
<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í ... simplemente ponga la versión que está utilizando en newVersion, es decir (newVersion = "7.0.0.0")

Ali
fuente
Tuve este problema hace algunas veces y se solucionó de un solo golpe. Muchas gracias.
GutiérrezDev
5

Solución cerrada

Abra packages.configy *.csprojcon 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 nuevamente y vuelva a instalar Newtonsoft.Json por Install-Package Newtonsoft.Json

Funciona para mi.

Trương Quốc Khánh
fuente
funciona en algún momento, pero en las próximas versiones este problema volvió a
surgir
No hay problema si no lo actualiza jaja. Cree un proyecto basura e instale Newtonsoft.Json.dll, cópielo (archivo dll) y agréguelo a su referencia de proyecto.
Trương Quốc Khánh
4

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 accesorios dll de prueba para ejecutar.

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 los redireccionamientos de enlace a un nuevo archivo de configuración, "tests.config" que estaba al lado del archivo "tests.nunit".

declyne
fuente
¿puedes elaborar?
KirstieBallance
4

Tengo el mismo tipo de problema. Y también lo resolví simplemente haciendo lo siguiente: Vaya a HERRAMIENTAS > NuGet Package Manager y Seleccione Package Manager Console . Finalmente, ejecute los siguientes dos comandos :)

  1. desinstalar-paquete newtonsoft.json -force
  2. paquete-instalación newtonsoft.json
Masud Shrabon
fuente
4

Debe actualizar el archivo web.config en el servidor. Cuando nuget instale NewtonSoft, actualice este archivo, incluido 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>

oaamados
fuente
En mi caso, esa fue exactamente mi solución, poner en app.config. "Las versiones de ensamblaje se pueden redirigir en la aplicación, la política del editor o los archivos de configuración de la máquina".
datps
3

Cometí el error de agregar un archivo NewtonSoft .dll para .Net 4.5.

Mi proyecto principal fue 4.5, pero cuando agregué un proyecto adicional a mi solución, extrañamente lo agregó como un proyecto .Net 2.0 ... y cuando intenté usar el dll 4.5 de NewtonSoft con esto, obtuve este "Newtonsoft.Json no pudo error "t be found".

La solución (por supuesto) fue cambiar este nuevo proyecto de .Net 2.0 a 4.5.

Mike Gledhill
fuente
3

En mi caso, el proyecto principal todavía hacía referencia a una versión anterior de Newtonsoft.Json que ya no existía en el proyecto (que se muestra con un signo de exclamación amarillo). La eliminación de la referencia resolvió el problema, no fue necesario un enlace vinculante.

IngoB
fuente
3

Tuve exactamente el mismo problema con la versión 7.0.0.0, y la lib que causó mi 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 administració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, apareció nuevamente con el mismo error. Instalé la versión 6.0.0.0 y la actualicé a 7.0.0.0, funciona bien ahora.

lazizanie
fuente
Trabajó para mi. Instalé la versión Newtonsoft Json 7.0.1 (beta), pero la configuración generada apuntaba a 6.0.0.0 que no era correcta. ¡Gracias!
Dhanuka777
2

En mi caso, después de descargar el ensamblado y agregar la referencia al proyecto, resolví esto 'desbloqueando' la DLL antes de agregar la referencia al proyecto.

Con el explorador de Windows, busque 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 podrá agregar la referencia y el ensamblaje se cargará correctamente.

VorTechS
fuente
2

Haga clic derecho en su proyecto, seleccione administrar paquetes Nuget, escriba newtonsoft en el cuadro de búsqueda e instale la última versión. Luego ejecuta tu aplicación

uche Godfrey
fuente
2

Estaba enfrentando el mismo error y luché con él durante horas. Tenía un proyecto de API web que usa Newtonsoft.json y otro proyecto de UnitTest para el proyecto de API web. El proyecto de prueba de unidad también necesitaba la referencia Newtonsoft.json. Pero al agregar el enlace recibí la excepción anterior.

Finalmente lo resolví agregando el fragmento de código a continuación en la 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>
mukulsharma1146
fuente
<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>
mukulsharma1146
Estaba teniendo el mismo problema cuando actualicé Nestwonsoft.Json mientras todavía usaba una versión anterior de WebAPI, y esto lo resolvió. ¡Gracias!
Gavin.Paolucci.Kleinow
2

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 de ensamblaje dependiente.

Asegúrese de tener solo un elemento debajo de cada elemento.

En algunos casos, VS genera esto:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

En vez de

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

¡Me tomó mucho tiempo darme cuenta de que este era el problema!

Daniel
fuente
2

Debajo de 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>
Jaydeep Shil
fuente
2

Si el error desaparece localmente y aún aparece en el servidor, la solución que funciona conmigo es eliminar la carpeta bin y los paquetes.config y web.config y volver a cargar estos archivos

Ahmad Alaa
fuente