Erro CS1705: “que tem uma versão superior ao conjunto referenciado”


109

Estou investigando isso há um tempo e ainda não resolvi. Eu recebi a seguinte mensagem de erro:

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error)

O servidor da web está executando o Server 2003. Eu fui para c: \ windows \ assembly e de fato notei que havia 3 versões de Common.dll listadas. A versão mais alta listada foi 3.3.4269.17112

Copiei a dll com a versão: 3.3.4273.24368 para o diretório de montagem. Eu então recompilei e reimplantei meu código (provavelmente um exagero, mas tudo bem). Quando abri meu navegador em uma nova sessão e fui para a URL do site novamente, ainda recebi a mesma mensagem.

Posso usar o Windows Explorer e verificar se o Common.dll com versão superior também está listado.

O que mais posso fazer para resolver esse problema? Não quero alterar a referência em minha montagem para apontar para a versão mais antiga.


2
*.*Números de versão loucos . Reconstrua tudo, única maneira de ter certeza.
Hans Passant de

Respostas:



68

Eu tive este erro porque "Reconstruir" não era realmente reconstruir.

Solução: Feche o Visual Studio, realmente exclua a pasta bin e, em seguida, reconstrua, pode funcionar melhor.

Além disso, às vezes o Visual Studio mente sobre referências, portanto, verifique os HintPathem seus .csprojarquivos.


2
Este salvou meu bacon. Administrar localmente estava bem, mas publiquei uma mudança e as coisas ficaram malucas. A exclusão do conteúdo da pasta bin online forçou as coisas a voltarem a sincronizar. Obrigado!
pStan

40

Se você estiver usando o NuGet, vale a pena ir em 'Gerenciar pacotes NuGet para solução' , localizar o pacote que está causando problemas e clicar em atualizar. Em seguida, ele deve trazer todos os pacotes para a versão mais recente e resolver o problema.

Vale a pena tentar, pois é rápido e fácil.


2
Isso resolveu para mim, obrigado. Minha situação era um pouco diferente: não estava listado nas atualizações, então tive que ir para instalado e havia uma janela que mostrava a versão do pacote por projeto. Eu estava atualizando alguns módulos antigos para uma nova versão de um cms, então tive que ir para os pacotes com problemas, selecioná-los e clicar em instalar. Pode ter sido porque o cms acabou de mudar para usar nuget, mas você me poupou de muitas csprojedições tediosas !
rtpHarry

3
Certifique-se de atualizar os pacotes NuGet no nível da solução, e não no nível do projeto.
Jess

2
Essa certamente deveria ser a resposta aceita por todos os meios, eu não li isso, mas tentei minha solução sem querer, que funcionou como um encanto.
baymax

30

Meu problema era que eu tinha 2 projetos referenciando 2 cópias diferentes da mesma dll que tinham versões diferentes. Eu consertei removendo os dois e verificando se eles estavam fazendo referência ao mesmo arquivo DLL.


13

Uma possível causa é que o segundo assembly é instalado no GAC enquanto o primeiro assembly, com um número de versão superior, é adicionado às referências do projeto. Para verificar isso, clique duas vezes na montagem nas referências do projeto e verifique se há outra montagem com o mesmo nome no Pesquisador de objetos.

Se for esse o caso, use o utilitário gacutil.exe para desinstalar o segundo assembly do GAC. Por exemplo, se forem conjuntos de 64 bits:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>

Dois anos depois, sua sugestão funcionou perfeitamente. A visualização das referências no Pesquisador de objetos classificou-o.
ceebreenk

3

Vá para Referência e adicione uma nova referência do arquivo dll que está causando o problema e certifique-se de que todas as dlls sejam compiladas com a mesma versão. Funciona para mim, espero que funcione para você também.


2

Minha equipe acabou de encontrar esse problema em nosso ambiente de construção. O problema era devido a uma diferença no elemento <HintPath> do arquivo .csproj.

Nosso assembly comum tinha um caminho relativo correto para o diretório que contém nossos assemblies de referência. O assembly dependente tinha um caminho de uma estrutura de diretório anterior. A solução foi compilada com sucesso em máquinas de desenvolvimento, pois o GAC resolveu a referência do dependente para a versão correta instalada em C: \ Arquivos de programas. O ambiente de construção tinha uma instalação legada do assembly (embora não devesse ter nenhuma) para a qual ele retrocedeu e, portanto, o erro. Atualizar o <HintPath> em um editor de texto corrigiu o problema.


2

O problema é visto se os pacotes nuget variam em vários projetos dentro da solução.

Você pode corrigir isso atualizando os pacotes nuget para uma versão comum com todos os PROJETOS na SOLUÇÃO


1

Teve um problema semelhante. Meu problema era que eu tinha vários projetos na mesma solução, cada um referenciando uma versão específica de uma DLL, mas com versões diferentes. A solução foi definir 'Versão específica' como falsa em todas as propriedades de todas as referências.


1

Sei que isso foi perguntado há algum tempo, depois de tentar algumas das etapas acima. O que me ajudou foram as etapas a seguir e este artigo .

Eu localizei a referência e alterei o PublicKeyToken daquele que está sendo referenciado para o mais antigo.

Espero que isso ajude também.


1

Eu tive o mesmo erro. Corrigi o erro depois de instalar Microsoft.AspNetCore.ALLno projeto de teste.


0

Pasta de coleção de dll Handmade
Se você solução tem uma pasta de lixo para dll-arquivos de diferentes bibliotecas
lib, source, libs, etc.
Você pode obter este problema se você vai abrir a sua solução (por um tempo abetos) no Visual Studio. E a pasta de coleta de sua dll é perdida de alguma forma ou um arquivo dll concreto é perdido.

O Visual Studio tentará silenciosamente substituir a referência da dll por algo por conta própria. Se o VS for bem-sucedido, uma nova referência será persistente para sua solução local. Não para outros clones / checkouts.

Ou seja, seu <HintPath>arquivo será ignorado e seu arquivo de projeto (.csproj) não será alterado.
Como um exemplo de mim

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

O DocumentFormat.OpenXmlserá referenciado de C:\Program Files (x86)\Open XML SDK\V2.5\libnão de uma solution\..\libpasta.

Solução alternativa rápida

  • verifique e restaure a pasta de coleta de dll
  • no Solution Explorer, faça Unload Project e , em seguida, Reload Project .

A solução alternativa certa é migrar para o gerenciador de pacotes NuGet.


0

para o SharePoint, certifique-se de que em sua pasta raiz você não tenha uma pasta "bin" com suas DLLs, em caso afirmativo, apenas exclua-a. (e altere "Copiar local" para falso no VS).


0

As referências em um projeto de site são armazenadas em seu arquivo web.config. Atualize a referência para corrigir o erro.

Passei algum tempo examinando todas as referências em minha solução antes de perceber que tinha esquecido as referências no arquivo web.config.


0

Eu tive o mesmo problema com UnitTestingProject, onde no MainProject eu estava usando "System.Web.Mvc, Version = 3.0.0.0" e em UnitTestingProject eu estava usando "System.Web.Mvc, Version = 3.0.0.1"

Altere o seguinte no <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>


0

Consegui isso depois de adicionar Episerver Find ao nosso site e instalar o pacote NuGet correspondente para Episerver Find.

A correção foi fácil: atualize todos os complementos relacionados ao Episerver também (mesmo que pareçam não relacionados: CMS, CMS.TinyMCE, CMS.UI, etc.)

Depois de atualizar todos os add-ons Episerver possíveis e recompilar, o erro foi embora.


0

Em meu cenário, editei o arquivo .csproj para meu aplicativo dotnetCore. Percebi que a tag TargetFramework tinha um valor de netcoreapp2.1 e a tag RuntimeFrameworkVersion um valor de 2.0.0 . Então eu mudei o RuntimeFrameworkVersion para 2.1.0 , salvei, reiniciei o VS e reconstruí e então resolvi os erros.

Espero que isso ajude você ...

Boa sorte,

Sugeshan


-1

Em seu projeto encontre referências System.Web.Mvc verifique a versão.

Depois disso, clique com o botão direito em referências -> assemblies e pesquise system.web.mvc e configure -o.

O problema causa as diferentes versões desses assemblies .

Editar: em seguida, selecione gerenciar pacotes NuGet e instalar as atualizações (se você tiver vários projetos, instale atualizações neles também).

Atualização importante é Microsoft.AspNet.Mvc e Microsoft.Net.Compilers , não se esqueça disso!


-1

Em nossa equipe, estávamos trabalhando em diferentes computadores com o git. Alguém atualizou um dlle eu não o tinha. Acabei de atualizar minhas referências de dependências e o problema foi resolvido.


-3

Tive um problema semelhante, criei uma DLL, ou seja, A.dll, que referenciava outra DLL, ou seja, B.dll.

Criei um aplicativo C.exe e referenciei as DLLs A.dll e B.dll.

Solução - Ao remover a referência de B.dll de c.exe, consegui corrigir o problema.

Espero que isto ajude.

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.