O nome do tipo ou espaço para nome não existe [fechado]

318

Eu tenho um projeto de Serviço de Dados WCF criado com o Visual Studio 2010, que estava funcionando bem. De repente, não compilou mais. Ele estava me dando mensagens como:

Erro 7 O tipo ou nome do espaço para nome 'Serviços' não existe no espaço para nome 'System.Data' (está faltando uma referência de montagem?) C: \ U ... s \ Visual Studio 2010 \ Projects ... \ DataService. cs ...

Erro 8 O tipo ou nome do espaço para nome 'Linq' não existe no espaço para nome 'Sistema' (está faltando uma referência de montagem?) DependencyResolver.cs 3 14

Erro 10 O tipo ou nome do espaço para nome 'Web' não existe no espaço para nome 'System.ServiceModel' (está faltando uma referência de montagem?)

Erro 12 Não foi possível encontrar o tipo ou nome do namespace 'DataService' (está faltando uma diretiva de uso ou uma referência de montagem?)

Como posso corrigir isso?

Attilah
fonte
4
mesmo depois de adicionar esses, as mensagens de erro ainda permanecem
Attilah
18
Isso foi útil para mim. Não sei por que foi fechado.
usuário do gmail
2
Acho que é porque, embora as respostas tenham sido úteis, a pergunta original é muito aberta e é improvável que se relacione com mais ninguém, mesmo que as respostas o façam.
WongKongPhooey 26/15/15
48
Ei, olha! Uma pergunta útil sobre SO. Oh, espere, é fora de tópico. Mas tem um grande número de votos e uma resposta com ainda mais votos. Algo está certamente "errado" aqui, mas não é essa pergunta.
Jagd 23/02
3
Como os caras que votaram para fechar isso perderam o erro muito específico na pergunta ("O tipo ou nome do espaço para nome não existe no espaço para nome")? Eu tive um problema semelhante e pesquisei no Google essa mensagem de erro e essa pergunta foi o resultado principal. Portanto, a pergunta não é vaga.
Simon Tewsi 20/09/18

Respostas:

619

Eu tive o mesmo problema e tive que definir o "Target Framework" de todos os projetos para ser o mesmo. Então construiu bem. No menu Project, clique em ProjectName Properties. Clique na guia compilar. Clique em Opções avançadas de compilação. Na estrutura de destino, escolha a estrutura desejada.

Nathan Koop
fonte
13
Defino o "Target Framework" clicando com o botão direito do mouse no projeto no Solution Explorer e selecionando Propriedades. O Target Framework deve estar visível na guia Application padrão.
Cookie
4
@jaminator Esta é uma solução em alguns casos. Pelo menos na minha. Por alguma razão, meu projeto se recusou a aceitar um espaço para nome da mesma solução. O problema era que o aplicativo do console estava direcionado ao perfil do cliente.
Amadiere
3
Funciona para mim também. Ocorreu quando eu estava adicionando um projeto WPF (.NET 4 Client Profile) e uma referência de projeto de biblioteca de classes (.NET 4). Muitíssimo obrigado !!
Tamas Ionut
58
+1 a isso. Mensagem de erro terrivelmente enganadora. Provavelmente me salvou horas tentando descobrir isso. Ei, Microsoft, que tal "incapaz de importar o namespace BLAH porque o BLAH é uma versão incompatível", mas acho que teria roubado 184 votos positivos a Nathan.
Gerald Davis
3
Existe uma solução alternativa para casos em que não podemos alterar as estruturas de destino dos projetos?
Raj123
43

Eu tive um problema com o System.Linq não sendo reconhecido. A usingdeclaração tinha um tom vermelho, etc. A maneira que resolvi foi mudar meu site para atingir o dotnet 3.5 e depois voltar para a estrutura de destino original (4.0 no meu caso).

john west
fonte
2
Trabalhou para mim também! Mas eu tive que fazer isso duas vezes ... vai entender!
Nicholeous 12/07/2013
Depois de mesclar manualmente alguns arquivos web.config de diferentes estruturas de destino para o mesmo aplicativo, o web.config parou de funcionar e recebi um 500 erro interno do servidor. Após a redefinição, conforme descrito, algumas configurações antigas foram removidas automaticamente pelo Visual Studio 2012 do web.config e o aplicativo funcionou novamente.
Humbads
Tive um problema semelhante, eu acho que algumas versões quadro só não reconhecem System.Linqcomo uma biblioteca válido
Callat
3
Obrigado. É ridículo que esse tópico tenha sido encerrado, pois isso também me ajudou depois de perder uma hora tentando descobrir por que minha função e referência pararam de funcionar do nada. A referência que falhou para mim foi system.management.automation.dll
Bbb
Isso foi realmente uma mágica. Assim como o meu novo Mobile Honor 8X, no qual, às vezes, alterar as configurações não entra em vigor imediatamente. Para que funcione corretamente, tenho que alternar várias vezes.
Harish NInge Gowda 02/04/19
28

Descobri que isso é causado por eu ter o mesmo nome de espaço para nome que o nome da classe ( MyWorld.MyWorld = Namespace.ClassName).

Altere seu namespace para um nome que não seja o mesmo da sua classe e isso será compilado.

Fonte

KiwiNige
fonte
6
Para resolvê-lo, basta prefixar o Windows.Whateverwithglobal::
joshcomley
20

Eu enfrentei o mesmo problema em um site do ASP.NET MVC quando tentei usar o LINQ to SQL . Corrigi o problema:

Solution Explorer -> Referências -> Clique com o botão direito do mouse em System.Data.Linq -> Copy Local (True)

ModChowdhury
fonte
17

Verifique se sua estrutura de destino possui as mesmas versões do .NET. Eu tive o mesmo problema e minha classe .NET era 3.5 e a solução web 4.5. Eu os sincronizei e funcionou :)

Gorglar
fonte
16
esta apenas repete ponto feito e explicado na resposta anterior que foi publicado vários meses antes deste
mosquito
12

Eu tive o mesmo problema e tentei todas as opções acima sem êxito, então descobri o que era:

Eu criei uma pasta chamada "Sistema" em um dos meus projetos e criei uma classe nela. O problema parece resultar de um espaço para nome chamado "Sistema" quando o arquivo .cs é criado, mesmo que esteja no espaço para nome "MyProject.System".

Olhando para trás, posso entender por que isso causaria problemas. Ele realmente me surpreendeu a princípio, pois as mensagens de erro inicialmente não parecem se relacionar com o problema.

GrandMasterFlush
fonte
1
Eu tive esse problema também, para referência. Seria bom se houvesse uma mensagem de erro mais explicativa na ferramenta, mas tudo bem.
Nick
3
Eu publiquei algo no MSDN sobre ele, mas o MS disse que não era um bug. Não vou discutir com isso, mas eu esperava que eles tivessem entendido como isso poderia causar problemas.
GrandMasterFlush
1
Isso é engano ...
Jitka Darbie Hübnerová
12

Eu experimentei o mesmo problema com o System.Data.SQLite. A origem do problema é que a dll que você usou deve ter a mesma versão do .NET com seu projeto.

Por exemplo, se você usou (no meu caso) SQLite para .NET 4.5, o destino da plataforma também deve ser o .NET 4.5.

Você pode encontrar o destino da plataforma: Projeto> (nome do projeto) Propriedades> Construir.

hakanali_md
fonte
1
Isso resolveu um problema que acabei de ter. A mensagem de erro não é muito útil, além de informar qual DLL é o problema.
precisa
7

No meu caso, o problema estava acontecendo porque a classe que eu criei tinha um espaço para nome que interferia nas classes existentes. A nova classe A tinha espaço para nome zz.yy.xx (por engano). As referências a objetos em outro espaço para nome yy.xx não estavam sendo compiladas na classe A ou em outras classes cujo espaço para nome era zz.

Alterei o namespace da classe A para yy.xx, que deveria ter sido e começou a funcionar.

zDan
fonte
5

PARA QUALQUER PESSOA COM ARQUIVOS LIGADOS: Eu tive esse problema e estava usando o silverlight e o arquivo incorreto que estava lançando esse erro era um arquivo vinculado.

O erro do compilador me disse que o erro estava ocorrendo no projeto em que o arquivo residia. Acabou que o erro NÃO estava naquele projeto, estava ocorrendo no projeto que continha o arquivo vinculado. Faltava referência a esse projeto.

Mario
fonte
Eu tive esse problema com o projeto .NET 4 usando System.Management.Automation ao testar o projeto com o Visual Studio 2013 no Windows 10. Atualizando o projeto para o problema corrigido no .NET 4.5.1.
Malcolm McCaffery
2

Encontrei esse problema ao usar a integração Git do Visual Studio para gerenciar o projeto. Por alguma razão, o projeto do Windows Phone 8 seria compilado muito bem ao direcionar o x86, mas quando eu o definia como ARM, falhava ao compilar com um erro indicando que "Publicidade" não existia no espaço de nome da Microsoft.

Acabei resolvendo o problema removendo a referência Microsoft.Advertising. *. Dll e adicionando-o novamente.

Tom Stu
fonte
1

No meu caso, não houve alteração nos projetos, apenas parou para compilar e com "o nome do tipo ou espaço para nome XXX não existe" e, na própria classe reclamante, o intellisense para esse espaço / classe XXX funciona bem. O problema estava mesmo em referências!

Passos para reproduzir:

  1. A solução possui o ProjectA, ProjectB. ProjetoA faz referência a log4net de terceiros e está marcado Copy local: true. O ProjectB faz referência ao ProjectA e não tem referência ao log4net. Solução compila bem.

  2. Alteração na propriedade ProjectA: referência para log4net Copy local: false.

  3. Limpe as pastas bin e obj.
  4. Quando você compila, o ProjectA compila, mas o ProjectB reclama de não encontrar o espaço para nome do ProjectA.

This is because ProjectB pasta bin está faltando biblioteca de terceiros (log4net in my case)!

Nesse caso, a solução seria -

  1. verifique se as referências de bibliotecas de terceiros estão definidas como Copy local: true ou
  2. adicione caminho a essas bibliotecas nas propriedades do projeto no caminho de referência.
Sasha Bond
fonte
1

Estou fazendo referência a Microsoft.CommerceServer.Runtime.Orders e o erro ocorreu. Este projeto é antigo e possui o framework .NET 2.0 da Target. Na saída, tive este erro:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3268: The primary reference "Microsoft.CommerceServer.Runtime" could not be resolved because it has an indirect dependency on the framework assembly "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v2.0". To resolve this problem, either remove the reference "Microsoft.CommerceServer.Runtime" or retarget your application to a framework version which contains "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

Simplesmente mudei o framework de destino para o .NET 4 e agora ele cria.

Skychan
fonte
1

E se tudo mais falhar, como garantir que as estruturas de destino sejam iguais e que você esteja lidando com uma biblioteca de classes WPF no VS2010, basta reiniciar o Visual Studio. Isso fez por mim.

Klaus Nji
fonte
no meu caso vs2010, uma referência dll tem erro, eu li a referência dll e parece ótimo, mas depois de compilar a type namespace errorocorrência. E eu reinicio o visual studio, após reiniciar, o erro de dll original é exibido novamente, e eu o leio novamente e construo novamente, com sucesso.
yu yang Jian
0

Eu experimentei os mesmos erros. Depois que descobri que meu projeto tinha o nome errado do Assembly (copiei os arquivos de um projeto diferente e os espaços para nome ficaram um pouco confusos) e o alterei novamente, o projeto foi compilado de maneira agradável.

Fred
fonte
Apesar de ter votado mal, este foi o meu problema! Obrigado.
SteveCav
0

Recebi uma mensagem de erro muito semelhante causada por inadvertidamente criar uma duplicata de uma classe em outro projeto da minha solução. A exclusão da duplicata corrigiu o problema

Chris Halcrow
fonte
0

Recentemente, eu precisei fazer uma restauração do sistema e isso causou a alteração / desaparecimento de vários arquivos nos quais eu trabalhava desde a restauração. Alguns desses eram arquivos DLL. Usei o Source Control para recuperar o projeto inteiro, mas ainda tinha um problema semelhante ao acima. Eu encontrei esta resposta que descreveu você pode precisar remover uma DLL e lê-la para corrigir seus erros. Este foi o caso no meu cenário.

Removê WebMatrix.WebData-lo e lê-lo, além de adicionar no WebMatrix.Datameu erro corrigido The type or namespace name 'Data' does not exist in the namespace 'WebMatrix' ....

JabberwockyDecompiler
fonte
-3

Exclua o arquivo .refresh.dll se você estiver sob controle de origem. Depois reconstrua. Deveria funcionar. Isso funcionou para mim

sajad
fonte