Eu criei um novo projeto da web ASP.NET MVC 5 no VS 2013 (Atualização 1) e atualizei todos os pacotes NuGet. Quando eu construo o projeto, recebo o seguinte aviso:
aviso MSB3243: Não há como resolver o conflito entre "Newtonsoft.Json, Versão = 6.0.0.0, Cultura = neutra, PublicKeyToken = 30ad4fe6b2a6aeed" e "Newtonsoft.Json, Versão = 4.5.0.0, Cultura = neutra, PublicKeyToken = 30ad4fe6b2a6aeed".
Quando eu verifico o web.config, no entanto, vejo que um redirecionamento de ligação está em vigor:
<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 é exatamente o que o aviso informa.
Como posso corrigir esse aviso?
Respostas:
Aqui estão as etapas que usei para corrigir o aviso:
fonte
install.ps1
Tive esse problema porque atualizei os pacotes, que incluíam o Microsoft.AspNet.WebApi que tem uma referência a Newtonsoft.Json 4.5.6 e já tinha a versão 6 instalada. Não foi inteligente o suficiente usar a versão 6.
Para resolver isso, após a atualização do WebApi, abri Ferramentas> Gerenciador de pacotes NuGet> Console do Pacakge Manager e executei:
O log mostrou que as versões 6.0.xe 4.5.6 foram todas atualizadas para a mais recente e estava tudo bem.
Tenho a sensação de que isso vai acontecer novamente.
fonte
Descobri que excluir esta seção do arquivo de projeto para corrigir o problema.
fonte
Se nenhuma das opções acima funcionar, tente usar em web.config ou app.config:
fonte
Eu atualizei de Newtonsoft.Json 11.0.1 para 12.0.2. Abrindo o arquivo de projeto no Notepad ++ descobri ambos
e
Excluí o ItemGroup que envolve a referência com o caminho da dica para a versão 11.0.1.
Esses problemas podem ser extremamente frustrantes de encontrar. Além do mais, os desenvolvedores geralmente seguem as mesmas etapas das configurações de projeto anteriores. As configurações anteriores não encontraram o problema. Por alguma razão, o arquivo do projeto ocasionalmente é atualizado incorretamente.
Eu desejo desesperadamente que a Microsoft conserte esses problemas infernais de DLL de estúdio visual para que não apareçam. Isso acontece com muita frequência e faz com que o progresso seja interrompido até que seja consertado, geralmente por tentativa e erro.
fonte
A solução final para seus erros de redirecionamento de montagem
Ok, espero que isso ajude a resolver quaisquer discrepâncias de referência de montagem (sã) ...
Alegrar.
fonte
Lembre-se de que com o redirecionamento de ligação
Você está dizendo que as versões antigas da dll estão entre a versão 0.0.0.0 e a versão 6.0.0.0.
fonte
oldVersion
é um pouco incorreto aqui, na verdade, o que você está dizendo é que seu assembly / exe foi construído com uma referência a uma versão no intervalo0.0.0.0-6.0.0.0
e que a versão realmente instalada (e preferida) é o valor emnewVersion
(versão antiga seria melhor redigida como "versão esperada" e a nova versão seriam melhor expressas como "versão disponível real")Ninguém mencionou o seguinte, que em meu entender é a solução correta:
Vá para o csproj do projeto onde o nuget está instalado e defina
AutoGEneratedBindingRedirects
comofalse
.<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
Artigo completo no MSDN.
fonte
Eu atualizei meu pacote e até o reinstalei - mas ainda estava recebendo exatamente o mesmo erro que o OP mencionado. Eu editei manualmente a dll referenciada fazendo o seguinte.
Removi o newtonsoft.json.dll da minha referência e, em seguida, apaguei manualmente o .dll do diretório bin. Em seguida, copiei manualmente o newtonsoft.json.dll da pasta do pacote nuget para o compartimento do projeto e adicionei a referência navegando até o arquivo .dll.
Agora meu projeto é construído novamente.
fonte
Eu tive um problema semelhante e só queria postar uma resposta para outras pessoas na minha situação.
Eu tenho uma solução executando um aplicativo da Web ASP.NET com vários outros projetos de biblioteca de classe C #.
Meu aplicativo da Web ASP.NET não estava usando json, mas outros projetos onde.
Foi assim que eu consertei:
O passo 2 foi antes de mais nada adicionar uma informação de configuração para json, que sugere que todos os projetos, usem a versão mais recente (6), não importa qual versão eles tenham. Adicionar a associação de montagem ao Web.Config é provavelmente a solução.
No entanto, a etapa 2 também limpou algum código legado. Descobrimos que usamos anteriormente uma versão antiga (5) do json em nosso aplicativo da Web e as pastas NuGet não foram excluídas quando a referência foi (eu suspeito: manualmente) removida. Adicionando o json (6) mais recente, removeu as pastas antigas (json v5). Isso também pode fazer parte da correção.
fonte
Veverke mencionou que é possível desativar a geração de redirecionamentos de vinculação definindo AutoGEneratedBindingRedirects como false. Não tenho certeza se é uma coisa nova desde que esta pergunta foi postada, mas há uma opção "Ignorar a aplicação de redirecionamentos de vinculação" em Ferramentas / Opções / Gerenciador de Pacotes Nuget, que pode ser alternada. Por padrão, ele está desligado, o que significa que os redirecionamentos serão aplicados. No entanto, se você fizer isso, terá que gerenciar manualmente os redirecionamentos de ligação necessários.
fonte