O Visual Studio 2010 de repente não consegue ver o namespace?

83

Minha solução C # WinForms tem dois projetos. Uma DLL que é o projeto principal em que estou trabalhando e um WinForms executável que chamo de "Sandbox" para que eu possa compilar / executar / depurar a DLL facilmente de uma vez.

Estou trabalhando em .Net 4.0 para os dois projetos.

Tudo estava funcionando bem até que adicionei um código aparentemente inocente e uma referência a System.Web na DLL. Agora meu projeto Sandbox não pode ver o namespace do projeto DLL. Eu não mudei nada que eu acredite que deveria ter afetado isso.

Se eu excluir a referência do projeto à DLL das referências da Sandbox e adicioná-la novamente, os sublinhados vermelhos desaparecerão e a codificação de cores voltará para todas as minhas classes etc; mas assim que tento construir a solução, tudo desmorona novamente.

Quando clico com o botão direito do mouse no projeto DLL nas referências do Sandbox e vejo no navegador de objetos, posso ver o namespace e todas as coisas nele.

Tenho a sensação de que isso pode ser algum tipo de bug.

É algum tipo de bug do VS2010? Tive esse mesmo problema há alguns meses e só pude corrigi-lo na época fazendo um projeto totalmente novo e reimportando meus arquivos. Desta vez, porém, tenho um bajilhão de arquivos e só farei isso como último recurso!

Edit: Depois de passar em pânico e desfazer todas as minhas alterações, tentando descobrir o que causou os problemas, parece ser esta linha:

string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address);

Se eu comentar esta linha, não recebo erros de namespace e o projeto é construído bem. Não consigo ver nada de errado com essa linha.

Ozzah
fonte

Respostas:

149

Estou pronto para declarar que isso é um bug no VS2010, isso já afetou muitos programadores. A correção é fácil: Projeto + Propriedades, guia Aplicativo, altere Target Framework para ".NET Framework 4" em vez do Perfil do Cliente selecionado por padrão.

System.Web não está incluído no perfil do cliente. Ter esta opção em primeiro lugar é bastante bobo, o perfil do cliente é apenas 15% menor do que a versão completa do .NET 4.0. Tê-lo selecionado por padrão é ainda mais idiota. Mas estou divagando.

ATUALIZAÇÃO: felizmente, tudo isso foi corrigido no VS2012. O que não torna mais o perfil do cliente o padrão para um novo projeto. E o perfil do cliente foi completamente aposentado no .NET 4.5, boa viagem.

Hans Passant
fonte
1
Obrigado por isso. Minha DLL foi definida como .Net 4.0, mas o Sandbox foi definido como .Net 4.0 Client Profile. Depois de trabalhar neste projeto por 5 meses, a quantidade de pânico que eu tive quando a coisa toda desmoronou sem motivo aparente ... Pelo menos eu saberei na próxima vez!
Ozzah
27
Esse tipo de resposta é a verdadeira carne e batatas deste site. Minha fé na humanidade aumentou ligeiramente e meu projeto finalmente foi compilado. Obrigado.
CloudMeta
1
Eu mudei o Target Framework para 4.0 em todos os meus projetos, no entanto, os namespaces dos projetos dependentes ainda não foram encontrados. Há mais alguma coisa que devo verificar?
Steven Ryssaert
@UwConcept - não se trata do número da versão. Trata-se de perfil completo vs cliente. Por favor, comece sua própria pergunta se isso não ajudar.
Hans Passant
@HansPassant Sim, sinto muito se minha pergunta foi confusa. Eu estava usando a versão 4.0 do cliente e mudei para 4.0. Ainda assim, os namespaces em outros projetos em minha solução não podem ser encontrados entre projetos.
Steven Ryssaert
8

Verifique se ambos os projetos estão usando o perfil de não cliente para sua estrutura de destino (acesse as propriedades de cada projeto para fazer isso).

Mark Avenius
fonte
Obrigado Mark. Você e Hans acertaram na cabeça, isso consertou.
Ozzah
2

Uma possibilidade é que a versão de destino do .NET Framework da biblioteca de classes seja superior à do projeto. Enfrentei esse problema e o resolvi fechando o Visual Studio, reabrindo o Visual Studio, limpando e reconstruindo a solução. Isso funcionou para mim. Em alguns outros posts, li as respostas e a maioria dos usuários resolveu o problema seguindo este caminho.

Muhammad Sohail
fonte
1
Essa pergunta já foi respondida de forma satisfatória há mais de quatro anos e meio.
Ozzah
+ para adicionar informações úteis e úteis sobre um bug intimamente relacionado
Eric Brown - Cal
@Ozzah como alguém que está investigando esse bug em 2017, estou definitivamente feliz por ter mais informações. +1
Cowthulhu
1

Tente construir apenas o projeto com a dll Sandbox primeiro de forma independente.

Em seguida, aponte seu projeto executável para a dll necessária e verifique se copy localestá definido como true. nas configurações de referência.

Em seguida, crie o projeto executável.

Robin Maben
fonte
E, pelo amor de todas as coisas sagradas, certifique-se de que o tipo de destino esteja definido como Compilar e não Conteúdo (o que era meu por algum motivo)
jcolebrand
0

Alterar a estrutura de destino do ".NET Framweork 4 Client Profile" para ".NET Framework 4" funcionou para mim com um problema semelhante. Concordo que o perfil do cliente não parece ter muita vantagem em usá-lo. Parece que sou apanhado por erros estranhos que procuro até me lembrar que o Visual Studio usa como padrão o perfil do cliente. Acho que a moral da história ao receber um erro é: se "Rebuild Solution" não funcionar, verifique a estrutura de destino ...

Andy
fonte
0

Se você já tentou fazer a alteração do Framework e ainda não funcionou, espero que funcione para você (como funcionou para mim): Basta adicionar as referências necessárias de dentro de seus projetos. Muito óbvio, mas eu estava fazendo errado até descobrir qual era o problema.

lu1s
fonte
0

Eu acabei de ter esse problema e descobri que tinha vários namespaces sendo usados ​​com o mesmo nome de objeto (ou seja, os objetos de negócios tinham os mesmos nomes que modelos de mvc);

A qualificação total dos nomes resolveu o problema para mim.

Mike Cheel
fonte