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


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.


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.


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>

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.


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


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.


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


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

Fiz o truque para mim :)


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


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.


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 .


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


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.


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


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


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.


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


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

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>


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


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.


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.


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.


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.



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


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>

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


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>

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.