O nome não existe no erro de espaço para nome no XAML


126

Usando o VS2012 trabalhando em um aplicativo VB.NET WPF. Eu tenho um aplicativo tutorial simples do MusicPlayer que estou usando para aprender o WPF. Estou convertendo uma versão em C # do tutorial para VB.NET passo a passo.

Possui 2 classes no aplicativo que estão ambas no mesmo espaço para nome. Consigo fazer referência ao espaço para nome no XAML, mas quando tento fazer referência ao objeto de classe no XAML, recebo um erro e não consigo compilar.

O estranho é que o IntelliSense funciona bem com ambas as referências ao espaço para nome através da tag xmlns: c = e também ao digitar o objeto de classe usando <c: Mas o objeto é sublinhado e são gerados erros ao tentar criar ou trabalhar no designer.

Os arquivos de classe .vb estão em uma pasta chamada \ Controls. O espaço para nome raiz do projeto principal é intencionalmente deixado em branco. A classe é codificada como esta ...

Namespace MusicPlayer.Controls
    Public Class UpdatingMediaElement
       .... code here
    End Public
End Namespace

O xaml fica assim

(namespace definido na <Window >tag

xmlns:c="clr-namespace:MusicPlayer.Controls"

(objeto definido em a <Grid>)

  <c:UpdatingMediaElement Name="MyMediaElement" />

(erro exibido) O nome "UpdatingMediaElement" não existe no espaço para nome "clr-namespace: MusicPlayer.Controls".

Não sabe o que está errado ou como corrigi-lo?


13
Reiniciar o visual funcionou para mim. (nunca subestime o poder de reiniciar)
Falaque 5/05

1
Uma pequena ajuda para aqueles que estão lutando com isso: verifique se sua classe é pública.
Borzh

Respostas:


234

Ao escrever seu código wpf e o VS, diga que "O nome ABCDE não existe no espaço de nomes clr-namespace: ABC". Mas você pode criar seu projeto totalmente com sucesso, há apenas um pequeno inconveniente, porque você não pode ver a interface do usuário projetando (ou apenas deseja limpar o código).

Tente fazer o seguinte:

  • No VS, clique com o botão direito do mouse em sua Solução -> Propriedades -> Propriedades de Configuração

  • Uma nova caixa de diálogo é aberta, tente alterar as configurações do projeto de Debug para Release ou vice-versa.

Depois disso, recrie sua solução. Pode resolver o seu problema.


4
Isso ainda acontece na atualização 1. do Visual Studio 2015. Sua solução funcionou - obrigado!
Simon Smith

4
Talvez não, mas descobri que simplesmente alternar entre os modos Debug e Release na barra de ferramentas funcionava independentemente.
Ketura

35
Confirmado no VS 2017 versão 15.2 (26430.15) em julho de 2017. Simplesmente alterado no menu suspenso Debug to Release, a compilação e o erro desapareceram, a mudança de volta e compilada e o erro ainda desapareceu.
Tedd Hansen

7
Parece que o VS17 é especialmente teimoso - Tentei alterar Rel / Dbg, alterando x64 / x86, ShadowCache excluído, ComponentCache, pastas Bin / Obj, ainda tem "erros" e o designer não funciona para este aplicativo muito pequeno (outros aplicativos com como 50 visualizações WPF funcionam bem). Aconteceu de repente e não pode ir embora. Teve esse problema antes muitas vezes, mas pela primeira vez no VS17 e não pode corrigi-lo agora. Ainda assim, esta é a melhor resposta, pois funcionou tantas vezes antes.
bokibeg

7
Adoro o modo como volto a esta resposta e já a votei ... há 2,5 anos.
Mathieu Guindon

51

Se o assembly for diferente do namespace no qual sua classe está contida, você deverá especificá-lo explicitamente.

ex:-

xmlns:Local="clr-namespace:MusicPlayer.Controls;assembly=MusicPlayer"

1
Embora parecesse ter resolvido meu problema a princípio, ele ainda gera o mesmo erro. No entanto, agora ainda não sou capaz de criar a solução.
Bouke

6
@bouke Limpe a solução e reconstruí-lo
Vasanth Sriram

Incrível, obrigado. Isso realmente ajudou #
311 Keith

Isso fez por mim. O estranho é que os conversores estavam no mesmo assembly que o arquivo xaml ... Mas eles estavam em um espaço para nome diferente.
Jonathan Alfaro

Obrigado, a montagem estava faltando.
Bagerfahrer 04/04/19

31

Eu vi esse problema desaparecer limpando o cache de sombra do Xaml Design. Eu tive o problema com a Atualização 1 do Visual Studio 2015.

No Visual Studio 2015, o cache está localizado aqui:

%localappdata%\Microsoft\VisualStudio\14.0\Designer\ShadowCache

Processo:

  1. Clique com o botão direito do mouse na solução no Solution Explorer e escolha "Clean Solution"
  2. Shutdown Visual Studio
  3. Exclua a pasta ShadowCache
  4. Reabriu o projeto Visual Studio
  5. Reconstrua a solução

E pronto, não há mais erros de espaço para nome.


7
Infelizmente, não mudou nada para mim. Ainda lidando com isso irritante depois de quase um ano inteiro. : /
Khale_Kitha 10/10

3
Obrigado! Isso acabou funcionando para mim. É triste ver esses truques ainda sendo necessários no VS15
Ocab19

4
Você pode usar% localappdata% \ Microsoft \ VisualStudio \ 14.0 \ Designer \ para ir imediatamente para a pasta correta
Maxence

1
Ter um designer que só funcione se você criar a solução é terrível. Imagine dizer a um projetista que construa o carro inteiro antes de ver o design.
Paul McCarthy

26

No meu caso, foi por causa de outros erros de compilação . Quando outros erros foram resolvidos, esse erro aparentemente relacionado também foi removido da lista. Especialmente os erros na parte inferior da lista de erros e nas páginas que você alterou recentemente.

Portanto, não preste atenção diretamente a esse erro e concentre-se em outros erros primeiro.


2
Observe que fazer uma compilação / compilação resolveu esse problema para mim, mesmo que eu não tenha nenhum outro erro de compilação não relacionado. Parece que as janelas XAML nem sempre estão cientes das novas classes até que você faça uma compilação.
HK1 26/03

1
Este foi o melhor conselho para mim, mas como @ HK1 às vezes não há outras entradas na lista de erros do compilador ... não há erros na lista, mas existem outros erros. Para vê-los, comente ou exclua as linhas marcadas com o erro de espaço para nome, compile novamente e você verá os outros erros do compilador. Altere-os, e as linhas antes marcadas com o erro de espaço para nome serão aprovadas quando você restaurá-las.
SERWare 4/04

Eu havia removido um método no código por trás que ainda era referenciado no XAML. Depois que eu removi a referência, esse erro foi embora.
YarsRevenge13

23

Tente alterar a plataforma de destino de construção para x86 e criar o projeto.

Notei via Subversion que aparentemente mudei o destino da plataforma de construção do projeto para x64. Esta foi a única mudança que eu fiz. Depois de fazer essa alteração, o código estava funcionando por um curto período de tempo antes de começar a mostrar o mesmo erro que ocorreu. Alterei o destino da plataforma para x86 para testar e, de repente, meu designer estava trabalhando novamente. Posteriormente, mudei de volta para x64 e o problema desapareceu completamente. Eu suspeito que o designer cria algum tipo de código em cache no x32 e a alteração da plataforma de compilação x64 o quebra quando você faz alterações no código.


Eu tive essa re-ocorrência e posso confirmar que isso resolve o problema para mim. Você pode voltar para x64 depois de compilá-lo em x86.
teynon

Isso funcionou para mim também no VS 2012 ... depois de horas tentando descobrir algo lógico. Obrigado Tom!
Bryan Greenway

Mudar para x86 e voltar para x64 resolveu o problema aqui, então obrigado por me inspirar a tentar isso. Até fechei o VS, excluí bin e obj e reconstruí, junto com outras sugestões, e nada ajudou até isso.
Grault

Sim, isso também funcionou para mim na atualização 2. do VS2015. No entanto, era necessário recarregar meus arquivos DLL externos e reconstruí-los também.
SezMe 2/16

Com o VS2015U2, ainda recebo esse problema em x64. Funciona muito bem em qualquer CPU. Mudar para frente e para trás não funciona para mim.
DaleyKD

7

Não sei se isso vai ajudar mais alguém

Eu sou novo no WPF e ainda sou um novato no VB.net - então eu estava assumindo que a obtenção desse erro estava sendo causada por mim fazendo cúpula boba ........ suponha que eu estivesse realmente! Consegui me livrar dele movendo meu projeto de uma unidade compartilhada para uma das minhas unidades locais. O erro desapareceu, o projeto compila perfeitamente sem mais problemas - ainda. Parece que o VS2015 ainda tem problemas com projetos mantidos em uma unidade compartilhada.


2
Este foi o meu caso, mudei-o para minha vm (na qual desenvolvo) e boom sem problemas. Obrigado!
Mario Tacke

Este foi o meu caso, ao que parece. Movendo-os para uma unidade local (em vez de um compartilhamento de rede - conforme configurado pelo Parallels para unir um pouco o sistema de arquivos Mac e Windows), o problema foi corrigido.
Ckittel

7

Talvez outra solução para quando o projeto seja compilado, mas o erro XAML esteja sendo exibido:

  1. Na solução explore, no nó do projeto que contém o xaml
  2. Clique com o botão direito do mouse no projeto e escolha 'Descarregar projeto'
  3. Clique com o botão direito do mouse no projeto e escolha 'Recarregar projeto'. Verifique se o seu projeto ainda é escolhido como "projeto de inicialização". Se não :
  4. Clique com o botão direito do mouse no projeto e escolha 'Definir como projeto de inicialização'

Não há necessidade de reconstruir ou fechar o estúdio visual.


6

Jesus ... Isso ainda é um problema cinco anos depois, no Visual Studio 2017. Como sou novo no WPF, tinha certeza de que o problema era de alguma forma eu, mas não, tudo foi compilado e executado corretamente.

Tentei reconstruir, limpar e reconstruir, alternar entre a saída x86 / x64, reiniciar o Windows, limpar a pasta ShadowCache e adicionar "; assembly = {meu nome principal do assembly}" à declaração do namespace XML, nada funcionou! A única coisa que fez:

Coloque minha classe estática de comandos (no meu caso, o negócio era fazer o design descobrir meus comandos WPF) em seu assembly separado e alterar o nome do assembly para aquele em seu lugar.


2

Eu tive o mesmo problema e, no meu caso, o Markup Design View me pediu para reconstruir a solução e não me mostrou o layout do formulário com esta mensagem:, Design view is unavailable for x64 and ARM target platformsou Build the Project to update Design view.

Ele não é resolvido com a reconstrução da solução (nem a exibição de design nem o erro "O nome não existe no espaço para nome")

Eu acho que foi porque eu havia brincado com as configurações em Solução -> Propriedades> Propriedades de configuração

Finalmente resolvi o problema com 2 trabalhos:

  1. Marque todas as caixas de seleção na Coluna de Construção da página: Solução -> Propriedades -> Propriedades de Configuração
  2. Alterando as configurações da solução de Debug para Release ou vice-versa.

Eu acho que é um bug no Visual Studio2012 Update 2.


2

O mesmo problema afeta o Visual Studios 2013, Service Pack 4. Também tentei com o Visual Studios 2015 Preview com os mesmos resultados.

É apenas uma limitação do visualizador WPF que a equipe do Visual Studios não corrigiu. Como prova, a construção no modo x86 ativa o visualizador e a construção no modo x64 o desativa.

Estranhamente, o intellisense funciona para o Visual Studios 2013, Service Pack 4.


2

Recentemente, tive esse problema usando o VS 2015 Update 3 para meu projeto WPF no .NET 4.6.2. A cópia do meu projeto estava em uma pasta de rede , mudei-a localmente e isso resolveu o problema.

Isso pode resolver outros tipos de problemas, pois parece que o VS 2015 não gosta de caminhos de rede. Outro problema que é um grande problema para eles é a sincronização de repositórios git se meu projeto estiver em um caminho de rede, também resolvido movendo-o localmente.


1

Parece que esse problema pode ser resolvido através de uma variedade de "truques".

No meu caso, eu estava construindo / reconstruindo / limpando toda a solução, em vez de apenas o projeto em que estava trabalhando na solução. Depois de clicar em "Construir [meu projeto]", a mensagem de erro desapareceu.


1

Tente verificar suas referências de montagem. Se você tiver um ponto de exclamação amarelo nas referências do projeto, haverá um problema e você receberá todos os tipos de erros.

Se você souber que a referência do projeto está correta, verifique a estrutura Target. Por exemplo, ter um projeto usando a estrutura 4.5 como referência a um projeto com estrutura 4.5.2 não é uma boa combinação.


Em outras palavras, a versão do .NET Framework do projeto não pode ser mais antiga que a versão do .NET Framework do projeto referenciado.
icernos 3/08/19

1

A solução para mim foi desbloquear as DLLs do assembly. As mensagens de erro que você recebe não indicam isso, mas o designer XAML se recusa a carregar o que chama de assemblies "em área restrita". Você pode ver isso na janela de saída quando cria. As DLLs são bloqueadas se forem baixadas da Internet. Para desbloquear suas DLLs de assembly de terceiros:

  1. Clique com o botão direito do mouse no arquivo DLL no Windows Explorer e selecione Propriedades.
  2. Na parte inferior da guia Geral, clique no botão ou na caixa de seleção "Desbloquear".

Nota: Desbloqueie as DLLs apenas se tiver certeza de que elas são seguras.


Isso funcionou para mim - eu havia baixado um projeto do dropbox e estava recebendo o erro. Eu também tive que excluir o ShadowCache
geometrikal

1

No meu caso, o controle do usuário foi adicionado ao projeto principal. Eu tentei várias soluções acima sem sucesso. Gostaria de receber marcação inválida, mas a solução seria compilada e funcionaria, ou adicionaria o xmlns: c = "clr-namespace: MyProject; assembly = MyProject" e a marcação seria exibida, mas eu receberia um erro de compilação A tag não existe no espaço para nome XML.

Finalmente, adicionei um novo projeto da Biblioteca de controle de usuário do WPF à solução e movi meu controle de usuário do projeto principal para aquele. Adicionada a referência e alterada a montagem para apontar para a nova biblioteca e, finalmente, a marcação funcionou e o projeto foi compilado sem erros.


1

Eu passei por todas as respostas e nenhuma me ajudou. Finalmente, consegui resolvê-lo sozinho, apresentando a resposta, pois poderia ajudar os outros.

No meu caso, a solução tinha dois projetos, um contendo os modelos (digamos que o nome do projeto e da montagem era Models ) e outro contendo as visualizações e os modelos de visualização (conforme nossa convenção: projeto, nome do assembly e espaço para nome padrão eram Models.Monitor ) . O Models.Monitor se referiu ao projeto Models.

No projeto Models.Monitor, em um dos xaml, incluí o seguinte espaço para nome: xmlns: monitor = "clr-namespace: Models.Monitor"

Suspeito que o MsBuild e o Visual Studio tenham cometido um erro ao tentar encontrar um tipo de 'Monitor' no assembly 'Modelos' . Para resolver, tentei o seguinte:

  1. xmlns: monitor = "clr-namespace: Models.Monitor; assembly =" - que é válido se o namespace estiver no mesmo assembly que https://msdn.microsoft.com/en-us/library/ms747086(v=vs .110) .aspx
  2. também tentou a declaração explícita do espaço para nome: xmlns: monitor = "clr-namespace: Models.Monitor; assembly = Models.Monitor"

Nenhuma das opções acima funcionou.

Finalmente desisti e, como solução alternativa, movi o UserControl que estava tentando usar para outro espaço de nome: 'ModelsMonitor' . Eu era capaz de compilar bem depois disso.


1

No meu caso, eu tinha um espaço para nome e classe escritos exatamente da mesma forma; por exemplo, um dos meus espaços para nome era

firstDepth.secondDepth.Fubar

que contém suas próprias classes (por exemplo, firstDepth.secondDepth.Fubar.someclass)

mas eu também tive uma classe ' Fubar ' no namespace

firstDepth.secondDepth

que resolve textualmente para o mesmo que o espaço para nome Fubar acima.

Não faça isso


1

No meu caso, o problema ocorreu devido a alguns arquivos fantasmas no diretório obj do projeto. O seguinte corrigiu o problema para mim:

  • Projeto limpo
  • Sair do VS
  • rm -rf / obj / *
  • Chame o VS e reconstrua

1

Eu também estou tendo muitos problemas com este! O Intellisense me ajuda a completar o espaço para nome e tudo, mas o compilador chora. Eu tentei tudo o que encontrei neste e em outros tópicos. No entanto, no meu caso, o que ajudou no final foi escrever algo como isto:

xmlns:util="clr-namespace:LiveSpielTool.Utils;assembly="

Deixando o nome da montagem vazio. Não faço ideia do porquê. Mas foi mencionado aqui. Devo acrescentar que estou desenvolvendo um assembly, portanto o atributo assembly pode fazer sentido. Mas inserir o nome da montagem não funcionou. Tão estranho.


0

O VB.NET não adiciona automaticamente as informações de espaço para nome com base na estrutura da pasta, como em C #. Eu acho que estou passando pelo mesmo tutorial que você (Ensine-se WPF em 24 horas) e fazendo a mesma conversão para VB.

Eu achei que você tem que adicionar manualmente as informações Namespace para Ambos a classe XAML eo código XAML.VB por trás de ser capaz de usar os espaços de nomes como descrito no livro. Mesmo assim, o VB não atribui automaticamente o espaço para nome ao assembly, como no VB.

Há outro artigo aqui que mostra como incluir isso nos modelos de projeto para criar as informações do espaço para nome automaticamente - Adicionar espaço para nome automaticamente ao adicionar novo item


0

Na página de propriedades da solução, verifique a plataforma do assembly que contém "UpdatingMediaElement" e os conjuntos que contêm qualquer uma das superclasses e interfaces das quais "UpdatingMediaElement" subclasses ou implementa. Parece que a plataforma de todos esses assemblies deve ser "AnyCPU".


0

Outra causa possível: Um evento pós-compilação está removendo a DLL do projeto da pasta de compilação.

Para esclarecer: O designer do WPF pode relatar "O nome XXX não existe no espaço para nome ...", mesmo quando o nome existe no espaço para nome e o projeto cria e executa muito bem se um evento pós-compilação remover a DLL do projeto de a pasta de compilação (bin \ Debug, bin \ Release, etc.). Tenho experiência pessoal com isso no Visual Studio 2015.


0

Ok, então nenhuma dessas dicas funcionou para mim, infelizmente. Consegui resolver o problema. Parece que o Visual Studio não funciona bem com unidades de rede. Resolvi esse problema movendo o projeto da unidade compartilhada para o meu local e recompilado. Sem mais erros.


Esta resposta é fornecida pelo menos duas vezes acima.
Pdschuller

0

Adicionando à pilha.

O meu era o nome do assembly do aplicativo WPF e o mesmo nome do assembly que uma dll referenciada. Portanto, verifique se você não possui nomes de montagem duplicados em nenhum de seus projetos.


0

Eu tinha a solução armazenada em um compartilhamento de rede e toda vez que o abria, recebia o aviso sobre fontes não confiáveis. Mudei para uma unidade local e o erro "namespace não existe" desapareceu também.


0

Tente também clicar com o botão direito do mouse em seu projeto-> propriedades e alterar o destino da plataforma para Qualquer CPU e reconstruir; ele funcionará. Isso funcionou para mim


1
Sua sugestão é uma mudança significativa que pode até não ser uma possibilidade para o OP se ele estiver direcionado para um ambiente específico. De qualquer forma, é muito improvável que seja a causa do problema, e se ele resolvesse o problema para você, eu sugeriria que o seu problema real era incompatível com as configurações do projeto, o que teria se manifestado de várias maneiras diferentes para o problema mostrado aqui.
11268 LordWilmore

0

Esse problema também pode ser causado se o assembly que você está referenciando não for realmente construído. Por exemplo, se seu xaml estiver no Assembly1 e você estiver referenciando uma classe também no Assembly1, mas esse assembly tiver erros e não estiver construindo, esse erro será mostrado.

Eu me sinto boba com isso, mas no meu caso, eu estava rasgando um controle de usuário e, como resultado, tive todos os tipos de erros nas classes relacionadas. Como eu estava tentando consertar todos eles, comecei com os erros em questão, sem perceber que o xaml depende de assemblies construídos para encontrar essas referências (ao contrário do código c # / vb que pode resolver isso mesmo antes de você criar).


0

Eu adicionei o assembly como um projeto - primeiro excluí o ddl que foi adicionado especificamente às referências à dll - que o fez.


0

Eu fico com esse problema o tempo todo. Minhas visualizações estão em um projeto WPF Custom Control Library (uma variante da Class Library). Posso referenciar assemblies pré-criados, mas não posso referenciar nenhum código em outro projeto da mesma solução. Assim que eu mover o código para o mesmo projeto que o xaml é reconhecido.


0

No meu caso, esse problema ocorrerá quando a arquitetura do programa wpf não for exatamente a mesma com dependência. Suponha que você tenha uma dependência que é x64 e outra é AnyCPU. Se você escolher x64, o tipo na DLL de AnyCPU "não existe"; caso contrário, o tipo na DLL de x64 "não existe". Você simplesmente não pode emular os dois.

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.