Não foi possível carregar o arquivo ou o conjunto 'Newtonsoft.Json, Versão = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed'

233

Estou recebendo o erro

System.IO.FileLoadException: não foi possível carregar o arquivo ou o conjunto 'Newtonsoft.Json, versão = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' ou uma de suas dependências. A definição do manifesto da montagem localizada não corresponde à referência da montagem. (Exceção de HRESULT: 0x80131040)

para minha compilação de IC

Solução que tentei

<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>

Também não funcionou

user3437755
fonte
O erro significa que o .NET não conseguiu encontrar a biblioteca Json.NET . Você tem instalado?
TypeIA 19/0314
22
Exatamente o mesmo problema - me deixando louco. Deixe-me saber se você encontrar uma solução
Dean Chalk
Na verdade, para mim, adicionar o que você tentou resolveu o problema.
precisa saber é
Use a opção de consolidação no gerenciador de pacotes NuGet para garantir que as versões não se afastem.
Niico 12/04/19
Esta é a única coisa que funcionou para mim: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

Respostas:

237

No console do gerenciador de pacotes execute: Update-Package –reinstall Newtonsoft.Json.

ATUALIZAR

Originalmente, eu postei isso como um comentário, mas como o @OwenBlacker sugeriu, basta colocá-lo aqui:

Se você ainda receber um erro depois de fazer isso, o que funcionou para mim foi que excluí a <dependentAssembly>seção do Json.Net do meu .configarquivo. Reinstalar traz de volta se não estiver lá e, aparentemente, você precisa excluí-lo. Até que haja uma solução normal no próprio pacote, receio que esta etapa manual seja obrigatória.

Nota: Leia os comentários abaixo antes de fazer isso.

Conforme o comentário de René abaixo, lembre-se de que o comando postado na resposta reinstalará o pacote em todos os projetos da sua solução. Portanto, se você usar o pacote Newtonsoft.Json em vários projetos e talvez usar versões diferentes, apenas a execução do comando acima pode ter consequências indesejadas.

bobah75
fonte
7
Para o bem de todos que estão lendo isso: eu fiz isso e ainda tenho o erro. Então resolvi de alguma forma: Surpreendentemente, tive que excluir a <dependentAssembly>seção do Json.Net do meu .configarquivo. Reinstalar traz de volta se não estiver lá e, aparentemente, você precisa excluí-lo. Até que haja uma solução normal no próprio pacote, receio que esta etapa manual seja obrigatória.
Ofer Zelig
@OferZelig Você deve postar isso como uma resposta separada, para que você receba os votos positivos (e, mais importante, maior atenção). Não menos importante, porque ele trabalhou para mim também :)
Owen Blacker
@OwenBlacker thanks. Mas como já existem muitas respostas, as minhas se perderão. E essa resposta é muito boa, é que, se não funcionar, meu comentário "a completa". Você sabe o que? Acho que vou editar a resposta original. Mais importante do que ganhar representante próprio.
Ofer Zelig
43
Lembre-se de que o comando postado na resposta reinstalará o pacote em todos os projetos da sua solução. Portanto, se você usar o pacote Newtonsoft.Json em vários projetos e talvez usar versões diferentes, apenas a execução do comando acima pode ter consequências indesejadas.
René
Resolvido! Para mim, eu tinha a v6 instalada em um projeto, a reinstalação do gerenciador de pacotes trouxe para a v7.
jv-dev
123

Para todos que tiverem problemas com a versão Newtonsoft.Json v4.5, tente usar isso em web.config ou 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 se a configurationtag do seu arquivo de configuração não possui atributo de espaço para nome (conforme sugerido em https://stackoverflow.com/a/12011221/150370 ). Caso contrário, as assemblyBindingtags serão ignoradas.

ZeroDotNet
fonte
3
para mim, excluir o conteúdo da pasta bin manualmente após a limpeza (que não a esvazia) fez o truque depois de aplicar esta resposta.
Mikaël Mayer
Muito obrigado por isso! :)
Kamron K.
Funciona bem! A partir de 7/4/15 a versão atual do Newtonsoft.Json é 7.0.0 assim newVersion="6.0.0.0"deve ser alterado para newVersion="7.0.0.0"ou qualquer versão que você está usando
Moses Machua
3
Aquela nota no espaço para nome ... Eu poderia te abraçar. Queimei horas com isso sem saber que os redirecionamentos de ligação estavam sendo ignorados por causa disso.
Brian
1
A observação sobre o espaço para nome é tão importante que pode ser uma resposta por si só. Muito obrigado.
beawolf
42

O ponto principal é referenciar a versão correta no seu arquivo de configuração.

Passos;

1- veja qual é a versão do seu Newtonsoft.Json.dll na propriedade de referência do projeto, seja qual for a versão na pasta do pacote (por exemplo, a minha é 7.0.1 e a versão de referência é 7.0.0.0)

2- observe o que o projeto espera de você na exceção (a minha é 6.0.0.0)

3- Adicione uma montagem dependente ao seu arquivo de configuração, como deve 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
fonte
Desculpe, você pode dar apenas um voto a seu ponto (por exemplo, o meu é 7.0.1 e a versão de referência é 7.0.0.0) fez uma enorme diferença. Eu teria dado mais ..... Thanks :)
Zaker
Isso funcionou para mim. Atualizei a versão para 7, mas estava realmente executando a versão 8, então mudei a newVersion para 8.0, obrigado!
Keith
Mesmo instalando o 8.0.3 (como diz no gerenciador de pacotes nuget), o .dll em referências ainda é 8.0.0. Então mudei para 8.0.0.0 no meu web.config. Estranho como isso funcionou ontem, quando publiquei tudo e hoje de manhã não funciona mais.
CularBytes
24

Não tive sorte com nenhuma das soluções apresentadas aqui (desinstalar, reinstalar, excluir referências, criar bindingRedirects etc.). Precisei voltar para uma versão antiga do Newtonsoft. A versão 5.0.6 já estava funcionando antes, então tentei essa. Eu tive que inserir esses dois comandos no console do pacote:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

A -forceopção no primeiro comando é necessária para forçar a desinstalação. Dependências com outros assemblies impedem a desinstalação sem ele.

Karl Hoaglund
fonte
Funcionou como um encanto. Teve o erro no meu projeto MVC 4. Quase mudou para o serializador nativo.
Kees C. Bakker
obrigado, eu só precisava de mudança -version "5.0.6" para -pre: instalar-package newtonsoft.json -Pré
thiago.adriano26
22

Corrigi o problema ao adicionar esse redirecionamento de ligação ao meu arquivo .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>

A mensagem de erro reclama de não encontrar a versão 4.5.0.0, a versão atual do Newtonsoft.Json é 6.0.0.0, portanto, o redirecionamento deve ir de 4.5 para 6.0, e não vice-versa

MiMo
fonte
Sim, isso resolveu meu problema. Tão estranha a quantidade de problemas que o JSON.NET causa .. mas uma vez que se torna uma máquina dos sonhos. Obrigado +1
Piotr Kula
Seu snippet de código me fez perceber que estava faltando o elemento 'assemblyBinding'. Obrigado
Riga
21

Eu acho que você está apontando para o alvo errado, altere para 4.5 em vez 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>

Isso deve funcionar.

BrunoLM
fonte
1
Umbraco 7 necessário 4.5.0.0, então isso ajudou a obtê-lo instalado e funcionando
MagicalArmchair
19

Passei alguns dias tentando resolver esse problema frustrante. Eu tentei praticamente tudo o que pode ser encontrado na web. Finalmente, descobri que esse erro poderia ser causado (como no meu caso) pelas diferentes versões do projeto .Net de destino (4.5 e 4.5.1) em uma solução. Os passos abaixo o consertaram para mim:

  1. Verifique novamente a versão .Net de cada projeto que está na sua solução. Apenas clique com o botão direito do mouse no projeto e vá para Properties.

insira a descrição da imagem aqui

  1. Se possível, defina a mesma versão .Net para todos os projetos. Se não, pelo menos, tente alterar o projeto de inicialização (para mim, esse foi o responsável pelos problemas).

  2. Remova todos os Newtonsoft.Jsonpacotes da solução.

    uninstall-package newtonsoft.json -force

  3. Atualize todas as Newtonsoft.Jsonversões em todos os packages.configarquivos, assim

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

  4. Reinstale Newtonsoft.Jsondo "Package Manager Console" com:

    install-package newtonsoft.json

  5. Reconstrua a solução

(Opcional) 7. Se você alterou o projeto de inicialização, devolva-o novamente

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

Fiz o truque para mim :)

Chiranjeeb
fonte
1
isso fez o truque para mim também. atualizou automaticamente o arquivo webconfig para a versão correta.
Shaakir 19/07/16
Eu também, isso realmente ajudou.
Mike Malter
11

se você estiver usando vários projetos na mesma solução e biblioteca da outra verificação, todos os projetos terão a mesma versão do Newtonsoft.Json

Fatih
fonte
Este foi o meu problema. Muito frustrante, passando por todas as respostas acima e sem obter resultados. Finalmente descobri quando me preocupei em verificar a versão do .dll na minha pasta Build.
10

Remova o assembly Newtonsoft.Json da referência do projeto e adicione-o novamente. Você provavelmente excluiu ou substituiu a dll por acidente.

helb
fonte
Essa abordagem funcionou em um projeto iOS do Xamarin Forms, no qual eu larguei o pacote NuGet e o adicionei novamente. Obrigado.
O senador
9

Eu estava escrevendo um cliente de serviço WebApi REST, então, para mim, esse erro foi causado pela adição de referências aos assemblies System.Net.Httpe System.Net.Http.Formattingmanualmente via Add Reference, quando eu deveria ter adicionado o Microsoft.AspNet.WebApi.Clientpacote via NuGet . Veja também esta resposta para outra pergunta .

mschwaig
fonte
8

Você tem 2 versões diferentes da biblioteca JSON.NET em sua solução. Para resolver isso, você deve atualizá-los para a versão mais recente. Siga esses passos:

1-Open solution explorer 2-Clique com o botão direito do mouse no nome da solução 3-Selecione Gerenciar pacotes Nuget para a solução 4-Selecione atualizações no menu 5-Atualize o pacote JSON.NET

Isso resolverá seu problema.

link: Não foi possível carregar o arquivo ou assembly 'Newtonsoft.Json, Versão = 7.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' ou uma de suas dependências

mohammad
fonte
A maneira mais fácil e segura de corrigir esse problema. Obrigado @mohammad
deanwilliammills
7

Implante a versão correta na máquina do IC

Isso indica que o carregador de montagem encontrou uma versão diferente da Newtonsoft.Jsonmontagem, que não corresponde à referência que você criou em seu projeto. Para carregar o assembly corretamente, você deve implantar o assembly lado a lado com seu código compilado ou instalar a versão correta do assembly na máquina de destino (por exemplo, no GAC).

Alternativa: verifique se a configuração está no arquivo correto

Se você deseja manter a solução atual e carregar um assembly com uma versão diferente, verifique se a configuração que você postou está no .configarquivo correto . Lembre-se de que não existe xpto.dll.config, uma DLL carregada por um aplicativo sempre usa o arquivo de configuração do aplicativo em execução.

Miguel Angelo
fonte
6

Normalmente, adicionar o redirecionamento de ligação deve resolver esse problema, mas não estava funcionando para mim. Depois de algumas horas batendo a cabeça na parede, percebi que havia um atributo xmlns causando problemas no meu web.config. Após remover o atributo xmlns do nó de configuração no Web.config, os redirecionamentos de ligação funcionaram conforme o esperado.

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

David Paquette
fonte
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 mim .... basta colocar a versão que você está usando em newVersion, ou seja (newVersion = "7.0.0.0")

todos
fonte
Teve esse problema algumas vezes atrás e isso foi corrigido em um hit. Muito obrigado.
GutierrezDev
5

Feche a solução.

Abra packages.confige *.csprojcom o editor de texto e exclua qualquer linha que tenha 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>

Ou <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

Abra a solução novamente e reinstale o Newtonsoft.Json Install-Package Newtonsoft.Json

Isso funciona para mim.

Trương Quốc Khánh
fonte
funciona em algum momento, mas nas próximas compilações esse problema voltou novamente n novamente
Heemanshu Bhalla
Não tem problema se não atualizá-lo haha. Crie um projeto de lixo e instale o Newtonsoft.Json.dll, copie-o (arquivo dll) e adicione-o à referência do projeto.
Trống Quốc Khánh
4

Tivemos exatamente o mesmo problema que você mencionou. Estamos usando o nunit para executar testes por meio do CI, e temos o nunit executando um arquivo chamado tests.nunit, que descreve uma lista de dispositivos de teste da DLL a serem executados.

Cada dispositivo de teste tinha seu próprio arquivo de configuração, mas quando executado no arquivo "tests.nunit", os redirecionamentos de ligação parecem ser ignorados. A solução foi adicionar os redirecionamentos de ligação a um novo arquivo de configuração, "tests.config", que estava ao lado do arquivo "tests.nunit".

declyne
fonte
Você pode elaborar?
precisa saber é o seguinte
4

Eu tenho o mesmo tipo de problema. E também resolvi isso da seguinte maneira: Vá para FERRAMENTAS > NuGet Package Manager e selecione Package Manager Console . Por fim, execute os dois comandos a seguir :)

  1. pacote de desinstalação newtonsoft.json -force
  2. install-package newtonsoft.json
Masud Shrabon
fonte
4

Você deve atualizar o arquivo web.config no servidor. Quando o nuget instala o NewtonSoft, atualize este arquivo, incluindo 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
fonte
No meu caso, essa foi exatamente a minha solução, coloque em app.config. "As versões do assembly podem ser redirecionadas nos aplicativos, na política do editor ou nos arquivos de configuração da máquina."
datps 2/08/16
4

Basta verificar a versão do Newtonsoft.Json propriedades Newtonsoft

Então você precisa adicionar essa versão na sua configuração web (no meu caso 8.0.0.0) Web de configuração

Gerald Stanley Padgett Espinoz
fonte
3

Cometi o erro de adicionar um arquivo .dll da NewtonSoft para o .Net 4.5.

Meu projeto principal era 4.5, mas quando adicionei um projeto extra à minha solução, estranhamente o adicionei como um projeto .Net 2.0 ... e quando tentei usar a dll 4.5 da NewtonSoft com isso, obtive o seguinte "Newtonsoft.Json erro encontrado.

A solução (é claro) foi mudar esse novo projeto de .Net 2.0 para 4.5.

Mike Gledhill
fonte
3

No meu caso, o projeto principal ainda fazia referência a uma versão antiga do Newtonsoft.Json, que não existia mais no projeto (mostrada por um ponto de exclamação amarelo). A remoção da referência resolveu o problema, nenhum bindingRedirect era necessário.

IngoB
fonte
3

Eu tive exatamente o mesmo problema com a versão 7.0.0.0, e a lib que causou o problema foi o Microsoft.Rest.ClientRuntime, que de alguma forma se referia à versão errada (6.0.0.0) do Newtonsoft.json, apesar do gerenciamento de dependência correto no nugget ( a versão correta do newtonsoft.json (7.0.0.0) foi instalada).

Resolvi isso aplicando o redirecionamento acima de 6.0.0.0 para 7.0.0.0 (do Kadir Can) no arquivo de configuração:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

----> Depois de alguns dias sem alterar nada, surgiu novamente com o mesmo erro. Eu instalei a versão 6.0.0.0 n atualizei para 7.0.0.0 ele funciona bem agora.

lazizanie
fonte
Trabalhou para mim. Versão instalada Newtonsoft Json 7.0.1 (beta), mas a configuração gerada estava apontando para 6.0.0.0, o que não estava correto. Obrigado!
precisa saber é o seguinte
2

No meu caso, depois de baixar o assembly e adicionar a referência ao projeto, resolvi isso 'desbloqueando' a DLL antes de adicionar a referência ao projeto.

Usando o Windows Explorer, navegue até o local da DLL, clique com o botão direito do mouse na DLL e selecione 'propriedades'. Você encontrará um botão 'desbloquear' em uma das guias e poderá adicionar a referência e a montagem será carregada corretamente.

VorTechS
fonte
2

Clique com o botão direito do mouse no seu projeto, selecione gerenciar pacotes Nuget, digite newtonsoft na caixa de pesquisa e instale a versão mais recente. Em seguida, execute seu aplicativo

uche Godfrey
fonte
2

Eu estava enfrentando o mesmo erro e lutei com ele por horas. Eu tinha um projeto de API da web que está usando o Newtonsoft.json e outro projeto UnitTest para o projeto de API da web. O projeto de teste de unidade também precisava da referência Newtonsoft.json. Mas, ao adicionar o link, eu estava recebendo a exceção acima.

Finalmente resolvi adicionando o trecho de código abaixo no app.config do projeto de teste de unidade:

<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
fonte
<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
Eu estava tendo esse mesmo problema quando atualizei o Nestwonsoft.Json enquanto ainda estava usando a versão antiga do WebAPI, e isso foi resolvido. Obrigado!
Gavin.Paolucci.Kleinow
2

Outro problema insidioso é que parece que os redirecionamentos de ligação podem falhar silenciosamente se o elemento tiver uma configuração incorreta em qualquer outro elemento dependenteAssembly.

Verifique se você possui apenas um elemento em cada elemento.

Em alguns casos, o VS gera isso:

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

Ao invés de

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

Levei muito tempo para perceber que este era o problema!

Daniel
fonte
2

A seção abaixo adiciona ao seu 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
fonte
2

Se o erro desaparecer localmente e ainda aparecer no servidor, a solução que funciona comigo é excluir a pasta bin e packages.config e web.config e reenviar esses arquivos

Ahmad Alaa
fonte