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?
fonte
Respostas:
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.
fonte
Se o assembly for diferente do namespace no qual sua classe está contida, você deverá especificá-lo explicitamente.
ex:-
fonte
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:
Processo:
E pronto, não há mais erros de espaço para nome.
fonte
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.
fonte
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.
fonte
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.
fonte
Talvez outra solução para quando o projeto seja compilado, mas o erro XAML esteja sendo exibido:
Não há necessidade de reconstruir ou fechar o estúdio visual.
fonte
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.
fonte
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 platforms
ouBuild 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:
Eu acho que é um bug no Visual Studio2012 Update 2.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
Nota: Desbloqueie as DLLs apenas se tiver certeza de que elas são seguras.
fonte
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.
fonte
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:
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.
fonte
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
que contém suas próprias classes (por exemplo, firstDepth.secondDepth.Fubar.someclass)
mas eu também tive uma classe ' Fubar ' no namespace
que resolve textualmente para o mesmo que o espaço para nome Fubar acima.
Não faça isso
fonte
No meu caso, o problema ocorreu devido a alguns arquivos fantasmas no diretório obj do projeto. O seguinte corrigiu o problema para mim:
fonte
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:
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.
fonte
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
fonte
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".
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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
fonte
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).
fonte
Eu adicionei o assembly como um projeto - primeiro excluí o ddl que foi adicionado especificamente às referências à dll - que o fez.
fonte
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.
fonte
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.
fonte