Por que não consigo fazer referência à minha biblioteca de classes?

86

Tenho uma solução que contém um site e uma biblioteca de classes no Visual Studio 2008.

Em seguida, tenho outro projeto de site fora da solução que precisa fazer referência à biblioteca de classes. Eu clico com o botão direito na pasta Bin ou Projeto e seleciono Adicionar Referência, então seleciono meu Projeto de Biblioteca de Classes, ele adiciona as 15 ou mais DLLs que a biblioteca de classes precisa para a pasta bin sites, mas nenhum dos arquivos .cs reconhece as instruções de uso.

using MyLibrary.MyFolder;

Ele diz que não pode resolvê-lo e o ReSharper apenas diz que pode ser removido com segurança, pois não está sendo usado.

O ReSharper pode reconhecer que precisa da referência e sugere que "Referencie a minha biblioteca e use a minha pasta". Não sei por que está sugerindo que eu adicione uma referência que já tenho. Quando vou com a sugestão, recebo o erro

"Falha ao referenciar o módulo. Provavelmente, a referência produzirá dependências circulares entre os projetos."

Tentei ir às páginas de propriedades dos sites e remover todas as referências e adicioná-las novamente, mas deu os mesmos erros. Alguma ideia de por que isso não está funcionando?

Brandon
fonte
Verifique a versão do framework .net na biblioteca de classes e o projeto que você está referenciando
Manideep Innamuri

Respostas:

163

Além disso, verifique se os projetos da nova solução são executados em uma estrutura compatível com o projeto que você está tentando incluir. Eu estava tentando incluir uma referência a um projeto 4.0 em um projeto 3.5.

CindyH
fonte
3
Kudos! Eu estava construindo minha solução como 4.5 e a vinculava a 4.0. Devido ao nosso requisito 4.0 atual, eu rebaixei a nova solução para 4.0 e agora meu outro projeto não tem problemas em construir contra ele. 1 por me ajudar a manter a sanidade!
David Peterson
1
Já havia superado tantos obstáculos anteriores com este projeto, estava prestes a jogar a toalha quando recebi esse erro. Você salvou, obrigado!
Tony D
1
Não esperava que assim o problema fosse resolvido! Cool enuf
Irfaan
1
Então a Microsoft deveria dizer isso e incluir uma opção para colocá-los todos na mesma versão.
PRMan
1
Salvei meu dia! O VisualStudio nem mesmo emitia um alerta me lembrando disso :(
Reuel Ribeiro
86

Eu descobri como resolver esse problema (pelo menos para mim). Por que funcionou, não tenho certeza, mas funcionou. (Acabei de experimentar um segundo site que estava tendo o mesmo problema e a solução a seguir funcionou para isso também).

Tentei a limpeza normal dos projetos e a reconstrução, desligando todas as minhas instâncias do Visual Studio e reiniciando-as, até tentei reiniciar meu computador.

O que realmente funcionou foi abrir o projeto no Visual Studio, fechar todas as guias abertas e, em seguida, desligá-lo.

Antes eu deixava as guias abertas porque não achava que isso importava (e quase nunca fecho as guias que estou usando).

Brandon
fonte
Simplesmente reiniciar o VS funcionou para mim. A causa desse problema era uma refatoração de renomeação de Projeto / Espaço de nome, disparando um bug no R #.
mbx
Isso funcionou para mim também. Fechei todas as guias como você disse e reiniciei meu IDE e voila, posso consultar minha biblioteca de classes agora. Obrigado.
yuva
31

Uma possibilidade é que a versão de destino do .NET Framework da biblioteca de classes seja superior à do projeto.

user4847434
fonte
8

Eu tive um problema semelhante, todas as minhas referências foram bagunçadas pelo Resharper - A solução que funcionou para mim é limpar o Cache de ReSharper e reiniciar o VS

ferramentas-> opções-> resharper-> opções-> geral-> clique no botão limpar caches e reinicie o VS

Rochoso
fonte
4

Eu tive problemas semelhantes onde algumas vezes o VS compilava e às vezes não. Após algumas pesquisas e tentativas, descobri que tinha uma referência ambígua a uma classe com o mesmo nome em diferentes bibliotecas ('FileManager'). O projeto que não iria construir foram meus testes de unidade que fazem referência a todos os módulos em minha solução. Impor a referência a um módulo específico resolveu as coisas para mim.

Meu ponto é: em vez de culpar o ReSharper ou o VS, pode ser uma boa ideia verificar se realmente não existe algum tipo de referência circular de alguma forma. Mais do que frequentemente, classes com os mesmos nomes em módulos diferentes podem causar confusão e geralmente é um sintoma de design ruim (como no meu caso).

Fedor Steeman
fonte
+1 no meu caso, dois projetos com namespaces diferentes foram compilados em um .exe com o mesmo nome (nome do assembly na guia Aplicativo no Visual Studio) - por causa de um projeto de migração, isso faz (algum) sentido; MSBuild na linha de comando nos deu uma única pista não é tão útil que nos deixou perguntando por um tempo: The type or namespace name 'A' does not exist in the namespace 'B'. Observe que nenhum aviso aparece para isso ...
Jonno
3

Isso soa como um problema semelhante com o ReSharper:

http://www.jetbrains.net/devnet/thread/275827

De acordo com um usuário no thread, forçar uma compilação corrige o problema (CTRL + Shift + B) após a primeira compilação.

Parece um problema com o ReSharper, especificamente no caso deles. Você tentou construir independentemente dos avisos e de possíveis erros falsos?

KP.
fonte
Eu descobri isso antes. E não tenho certeza se construí-lo "resolveu" o problema. Ele compila, mas ainda mostra as classes, usando instruções, classes, etc. como não reconhecidas. No entanto, se eu interromper propositalmente alguma chamada de método, o Visual Studio parece reconhecer o erro, mesmo que não me mostre a lista de parâmetros. Eu acho que é culpa do ReSharpers.
Brandon
3

Como os dois estão na mesma solução, em vez de adicionar uma referência à DLL, adicione uma referência ao próprio projeto de biblioteca de classes (a caixa de diálogo Adicionar Referência terá uma guia para isso).

Ahh, é uma solução diferente. Perdi isso. Que tal você tentar em vez de adicionar uma referência ao projeto adicionando uma referência à DLL compilada de sua biblioteca de classes. A caixa de diálogo Adicionar Referência possui uma guia Procurar que faz isso.

Vilx-
fonte
1
Isso funcionou para mim, outras soluções sugeriram adicionar uma referência, mas por algum motivo eu não a encontrei até clicar com o botão direito do mouse no projeto principal no explorador de soluções.
Ralpharama
2

Se você estiver fazendo referência a assemblies para projetos que estão na mesma solução, adicione uma referência de projeto (usando a guia "Projetos") em vez de navegar pela dll na pasta \ bin \ Debug (ou \ bin \ Release) (usando o Guia "Navegar"). Veja a captura de tela abaixo. Procure o arquivo assembly / dll apenas se ele for considerado um assembly externo.

insira a descrição da imagem aqui

MacGyver
fonte
2

Excluí * .csproj.user (arquivo resharper) do meu projeto, fechei todas as guias e reabri-o. Depois disso, consegui compilar meu projeto e não houve avisos de redefinição.

Alex
fonte
Fiz isso e fiz com que meu intelecto exibisse as informações do assembly novamente, mas assim que tentei recompilar, minhas informações do intelli-sense para aquele assembly foram apagadas e a construção falhou. Este é um erro estranho!
David Peterson
Eu também tive que recriar meu projeto do zero ... acho que fiz algumas ou muitas desinstalações / instalações no NuGet em um projeto relativamente novo.
Adam Nofsinger
Excluir e recriar referências funcionou para mim, a exclusão completa do arquivo do projeto pode ser um exagero.
danjuggler
2

Eu tive esse problema. Levei séculos para descobrir. Eu tinha pessoas por cima do meu ombro para ajudar. Nós reconstruímos, limpamos e reiniciamos o Visual Studio e isso não corrigiu. Removemos e adicionamos novamente as referências ...

Tudo em vão .... Até!

A solução para meu problema foi que minha declaração de classe foi escrita incorretamente.

Antes de começar a me julgar com severidade, permita-me explicar por que não foi estúpido e também por que esse erro pode ser cometido até mesmo pelo mais inteligente dos programadores.

Como o erro estava no início do nome, ele não estava aparecendo na lista de classes da Intellisense quando comecei a digitar.

por exemplo

Nome da classe: Message.cs

Declaração:

public class Massage
{
    //code here

}

À primeira vista e em uma fonte pequena, Massage parece idêntico a Message.

Digitar M listou muitas classes, então digitei e, que não apareceu na versão digitada incorretamente, o que deu a impressão de que a classe não estava sendo captada pelo compilador.

WonderWorker
fonte
Basicamente, você cometeu um erro de digitação. Isso não é realmente útil para os outros.
TylerH
2

Depois de confirmar que a mesma versão do asp.net estava sendo usada. Tirei o projeto. limpou a solução e adicionou novamente o projeto. Isto é o que funcionou para mim.

David
fonte
0

Tive um problema semelhante no VS 2010, ao criar um projeto de teste para um aplicativo MVC 2. Os sintomas eram idênticos.

A mensagem do ReSharper foi um tanto enganosa. Por um momento, ignorei completamente o ReSharper e o fiz do "modo VS manual":

  1. Limpei a solução.
  2. Eu adicionei manualmente a referência ao projeto MVC.
  3. Eu adicionei manualmente as diretivas using.
  4. ctrl-shift-b

Nesse estágio, recebi um erro de compilação: deveria ter referenciado o System.Web.Mvcassembly em meu projeto de teste (suspiro). Adicionar esta referência faz com que o projeto seja compilado. Os problemas do ReSharper permanecem, mas o executor de teste do ReSharper funciona.

Quando eu reinicio o VS, os erros do ReSharper também desapareceram. Não tenho certeza se a reinicialização é necessária - simplesmente fechar o arquivo .cs pode ser suficiente.

De agora em diante, quando vir a mensagem ReSharper

Falha ao referenciar o módulo. Provavelmente, a referência produzirá dependências circulares entre os projetos.

Vou ler

Falha ao referenciar o módulo. Provavelmente, a referência produzirá dependências circulares entre projetos ou estão faltando algumas referências às dependências das dependências da referência.

Marijn
fonte
0

Outra possível correção que funcionou para mim:

Se você tiver o Assembly A, que faz referência ao Assembly B, ambos fazendo referência a um assembly X não relacionado ao projeto (externo), e o código do Assembly B não reconhecerá que você fez referência a X, tente as seguintes etapas em ordem:

  • Retire a referência a X de AMBOS A e B
  • Recrie a referência a X em B
  • Recrie a referência a X em A

Aparentemente, o VS não reconhecerá uma referência a um assembly externo em um projeto que é uma dependência de outro projeto que já faz referência ao externo. Ao configurar as referências novamente do zero, você supera isso. É muito estranho.

KeithS
fonte
Interessante, mas verdadeiro no VS2015. Obrigado!
Scott Nimrod
0

Enfrentei esse problema e resolvi fechando o Visual Studio, reabrindo o Visual Studio, limpando e reconstruindo a solução. Isso funcionou para mim.

Muhammad Sohail
fonte
0

Se estiver usando o TFS, a execução de Obter o mais recente (recursivo) nem sempre funciona. Em vez disso, eu forço obter o mais recente clicando em Controle de código-fonte => Obter versão específica e clicando em ambas as caixas. Isso tende a funcionar.

insira a descrição da imagem aqui

Se ainda não funcionar, a exclusão do arquivo suo (geralmente encontrado no mesmo lugar da solução) força o visual studio a obter todos os arquivos da fonte (e posteriormente reconstruir o arquivo suo).

Se isso não funcionar, tente fechar todos os seus arquivos abertos e fechar o Visual Studio. Na próxima vez que você abrir o Visual Studio, ele deve estar consertado. Há um bug de resharper que é resolvido dessa forma.

WonderWorker
fonte
0

Eu tinha me deparado com um problema semelhante recentemente. Estou trabalhando no Visual Studio 2015 com Resharper Ultimate 2016.1.2. Eu estava tentando adicionar uma nova classe à minha base de código ao tentar fazer referência a uma classe de outro assembly, mas o Resharper geraria um erro para esse pacote.

Com a ajuda de um colega de trabalho, descobri que a classe referenciada existia no namespace global e não estava acessível na nova classe, pois estava oculta por outra entidade de mesmo nome que existia no namespace atual.

Adicionar uma palavra-chave 'global ::' antes do namespace necessário me ajudou a fazer referência à classe que eu estava procurando. Mais detalhes sobre isso podem ser encontrados na página listada abaixo:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

Lumena
fonte
0

Se os dois projetos estiverem contidos na mesma solução, será mais apropriado adicionar a referência para o projeto de que precisa, e não sua dll compilada.

insira a descrição da imagem aqui

Manuel Roldan
fonte
-1

Infelizmente, a única coisa que funcionou para mim foi excluir completamente e recriar o projeto da biblioteca de classes, depois de ter copiado temporariamente os arquivos da classe em outro lugar. Só então o projeto da web ASP.Net reconheceria as usinginstruções que se referiam ao projeto de biblioteca de classes. Isso foi com o Visual Studio 2010, não usando ReSharper.

snark
fonte
-1

Eu tive um problema semelhante. O que funcionou para mim é que eu adicionei a Biblioteca de Classes errada do Visual Studio . Eu adicionei usando o recurso de pesquisa do Visual Studio.

O que eu precisava fazer era Adicionar novo projeto> Visual C #> Biblioteca de classes . E esta biblioteca de classes recém-adicionada é a certa e agora pode ser adicionada como referência para qualquer projeto.

Muhammad Rehan Qadri
fonte
-4

Você pode esquecer de adicionar referência à biblioteca de classes que você precisava importar.

Clique com o botão direito na biblioteca de classes para a qual deseja importar (que contém várias bibliotecas de classes importadas), -> Adicionar-> Referência (Selecione Projetos-> Solução-> selecione a biblioteca de classes da qual deseja importar-> OK)

Kyle
fonte