ti-enxame.com

o nome <...> não existe no namespace clr-namespace <...>

Eu tenho um pequeno aplicativo WPF que costumava compilar muito bem, mas não é mais. Eu realmente não posso dizer em que ponto parou de construir. Apenas funcionou bem um dia e no outro não.

Aqui está a estrutura do projeto:
enter image description here
Não há outros projetos ou referências externas além das dlls .net padrão.

Aqui está o controle do usuário de onde o problema se originou:

<UserControl x:Class="TimeRecorder.HistoryUserControl"
         xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.Microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TimeRecorder.ViewModel"
         xmlns:framework="clr-namespace:TimeRecorder.Framework"
         mc:Ignorable="d" Height="Auto" Width="Auto" Padding="5">
<UserControl.Resources>
    <local:HistoryViewModel x:Key="ViewModel"/>
    <framework:BoolToColorConverter x:Key="ColorConverter"/>
</UserControl.Resources>
<StackPanel DataContext="{StaticResource ViewModel}">

E aqui está o erro que recebo: http://i48.tinypic.com/5u1u8w.png

Por favor, note que este não é apenas um arquivo na imagem, mas todas as referências que eu adiciono de forma semelhante em xaml em todos os arquivos de controle/janela do usuário neste projeto.

Portanto, o arquivo está lá, o namespace no arquivo está correto, o namespace/nome da classe no arquivo xaml é (no meu entender) correto. Eu fico intellisense quando eu digito o xaml para encontrar os arquivos ok, mas não quando ele compila.

A solução mais comum para isso em outros posts foi a versão do framework .net. Atualmente, ele está definido como .Net Framework 4 para meu projeto principal e de teste. A versão completa não é o perfil do cliente.

Aqui está o que eu acho que errei: No gerenciador de configuração, ambos os projetos têm sua plataforma definida como Qualquer CPU, mas em um ponto, quando tentamos resolver isso, notei que o projeto principal estava configurado para x86 e o ​​projeto de teste foi definido como Qualquer CPU. Então eu adicionei Any CPU manualmente para o projeto principal no gerenciador de configuração. No entanto, eu sinceramente não sei se fiz isso corretamente ou até mesmo se deveria fazê-lo. Então, como uma pergunta adicional, existe uma maneira de eu poder redefinir o gerenciador de configuração para seu estado padrão? Isso terá alguma coisa a dizer sobre o problema principal? Eu não sei se o projeto principal estava sempre configurado para x86 ou não, ou se de alguma forma eu mudei para x86 e depois ele quebrou. Como mencionado, este projeto estava compilando bem por um tempo. 

Alguma sugestão? Vou responder a perguntas mais detalhadas sobre o código ou o que for que você perguntar em vez de divagar aqui :)

60
ardal

Toda vez que aconteceu comigo, eu apenas reiniciei o visual studio, re-construí a solução e funcionou muito bem .. não posso dizer por que

97
gil kr

Além da mensagem "não existe no namespace", também recebi uma mensagem do designer que não exibia a janela para destinos x64 e ARM.

Acabei de descobrir que mudar a configuração para o modo x86, fazer uma solução de recriação, depois voltar para o modo x64 e depois recriar novamente corrige [ambos] os problemas.

Simplesmente reconstruir a solução x64 não fez nada.

29
Jerry

Isso é o que funcionou para mim no Visual Studio 2012 (atualização 3).

  • Reinicie o Visual Studio
  • Adicionar o assembly atual à declaração de namespace xmlns:framework="clr-namespace:TimeRecorder.Framework;Assembly=MyAssembly
  • Build -> Build Solution
11
Leon Storey

O que eu achei que ajudou (especialmente se este erro ocorrer em App.xaml) é comentar a (s) referência (ões) que lhe dão problemas, reconstruir, depois descomentar. I think o que isso faz é permitir que todo o projeto seja realmente construído em vez de parar a compilação no erro. 

Pelo que eu posso reunir, o aplicativo está tentando construir os arquivos em uma determinada ordem, então quando App.xaml ou presumivelmente qualquer outro erro de arquivo de classe em uma referência, o arquivo que está causando o erro não foi compilado corretamente, por isso não encontra o arquivo nesse namespace.

9
jaysoncopes

Reconstrua sua solução (às vezes limpa, em seguida, construir funciona melhor). Em seguida, examine sua lista de erros, role até a parte inferior e provavelmente indicará um erro que não permite a compilação de seu Assembly, e o compilador XAML provavelmente está usando uma versão em cache do Assembly, não o novo que você significa construir.

8
John C

Eu tive o problema semelhante. No meu caso, eu tive que fazer o seguinte

  • remova a marcação de referência de xaml (neste exemplo, <local:HistoryViewModel x:Key="ViewModel"/>)
  • construa a classe (neste arquivo de exemplo que contém a classe HistoryViewModel)
  • Uma vez construído, adicione a marcação de referência no xaml
  • construir de novo

O método acima funcionou para mim. 

7
Chandru

O que funcionou para mim: - Alternar a configuração da solução de Depurar para Liberar - Alternar a configuração de Liberar para Depurar

5
Hugues

Nenhuma das soluções funcionou para mim. Eu consertei assim:

  • Remova a dll da biblioteca das Referências
  • Baixe o código-fonte da biblioteca (em vez de apenas o arquivo dll)
  • Construa o projeto da biblioteca para obter um novo arquivo dll
  • Adicione o novo arquivo dll às referências do projeto principal
3
Noxxys

Eu mudei o Target Framework My Application de ".Net Framework 4.5" para ".Net Framework 4.6" e funcionou!

2
amir stack

Aqui está um exemplo estranho de algo semelhante:

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.Microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent">
...
</UserControl>

irá compilar (VS2013).

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.Microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent"
         IsVisibleChanged=onIsVisibleChanged>
...
</UserControl>

produz o erro "tipo Ui não encontrado em Gtl.Ui.Gtl" (e garanto que o método handler existe no code-behind). A solução é adicionar o manipulador no construtor de classe, mas vamos Microsoft, wtf está acontecendo?

2
Julian Gold

Eu enfrentei o mesmo problema quando eu estava tentando chamar o namespace no xaml. estava mostrando que a classe não está disponível no namespace. Eu procurei muito. Finalmente eu encontrei este problema foi com VS. Estou usando o VS 2013. Tentei as etapas abaixo:

  1. Build -> Configuration Manager -> Plataforma de Soluções Ativas -> Alterado para x64 e x86 e qualquer CPU.
  2. Fechado o VS e aberto novamente.
  3. Mudança

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    para

    xmlns:VM="clr-namespace:MyFirstAppViewModel;Assembly=ViewModel"
    
2
Abhishek Birtharey

Se este problema girasse em círculos perdendo algumas horas. Eu mudei uma dll de controle de usuário separada para o projeto para que ele foi compilado no projeto e não uma dll referenciada. Isso quebrou todo o projeto, então passei pela verificação meticulosa de todos os namespaces, caminhos e nomes de arquivos. Tentei deletar arquivos obj, mudando entre release e debug, entre x86 e AnyCPU. Abrindo salvando tudo, recompile ainda sem alegria.

Lembre-se de ter um problema semelhante antes, o erro sinalizado no VS2013 não estava diretamente relacionado a onde eu tinha que modificar o XAML, mas usando

x:Name="myControl"

em todos os controles, em vez de

Name="myControl"

consertou.

2
Moon Waxing
  • eu recomendaria Renomear x:Key="ViewModel" talvez haja uma falha
  • e se você digitar local:, o VS mostra a você HistoryViewModel
  • verifique também se a sua Class é public
1
WiiMaxx

Correu para esta edição hoje com o Visual Studio 2017 Community Edition. Tentei todas as sugestões aqui (redefinir VS 2017, mudou de x64 para x32 e vice-versa etc etc) e de outras fontes sem sucesso. O Intellisense sabe que tudo está lá, mas eu estava recebendo o mesmo erro toda vez.

De qualquer forma, a minha correção acabou por ser muito simples ... eles não são sempre quando você passou um par de horas sobre o problema!

Basicamente, fiz o seguinte ...

  1. Remover código ofensivo do arquivo xaml (apenas 3 linhas no meu caso)
  2. Construa o projeto para obter uma construção bem-sucedida
  3. Neste ponto, o layout magicamente apareceu na janela do designer que era um bom sinal!
  4. Reinseriu o código que eu removi no ponto 1. incluindo a entrada xmlns:
  5. Neste momento você não deve pegar nenhum rabisco azul ... esperançosamente
  6. Construa o projeto novamente

Parece que obtendo uma construção bem-sucedida, ela deve redefinir "algo" dentro do VS e/ou do Assembly. Depois de ter uma compilação bem-sucedida, tente inserir seu código novamente.

Espero que isso ajude alguém :)

1
DynamicL

Basta executar a análise de código no menu Build  

1
Ana El Bembo

Descobri que executar o comando "Run Code Analysis" reconstrói tudo e quase sempre corrige o problema (clique com o botão direito do mouse em project> Analyze> Run Code Analysis). Isso também geralmente reconstrói os arquivos de recursos também para que as strings, etc. possam ser encontradas.

0
Jeff

Tentei todas as soluções neste segmento, mas nenhum funcionou. Acabou sendo causado pela configuração da solução. Meu aplicativo WPF foi configurado para compilar para o X64 devido a algumas dependências nativas que o exigem, mas a configuração da solução ainda estava definida como AnyCPU para o projeto. Criar uma nova configuração X64 para o projeto no gerenciador de configuração da solução Designer XAML para finalmente reconhecer meu tipo e namespace.

0
Xeaz

O problema é que, quando você cria o destino x86, o caminho de saída para o projeto específico é definido como bin\x86\Debug. Parece que a mistura Expression não gosta nada disso. Parece apenas interessado no que está em bin\Debug.

Se você alterou seu (s) caminho (s) de saída para o projeto x86 para bin\debug por exemplo, então tenho certeza que você descobriria que ele funcionará. Bem, funciona para mim mesmo assim :)

0
RobM

Este é um problema recorrente para mim. Uma vez encontrei a solução olhando para a aba de aviso. Era um problema de versão do .NET framework e afirmava o seguinte:

Aviso 9 A referência principal "myDll" não pôde ser resolvida porque Foi criada na estrutura ".NETFramework, Version = v4.5.2". Essa é uma versão superior à estrutura atualmente segmentada. ".NETFramework, Versão = v4.0".

0
André Santaló

Esse erro geralmente ocorre quando o projeto não foi criado com êxito durante a última compilação. 

Passo 1) Primeiro, remova todo o código que causa erro do arquivo XAML ou .cs e crie e inicie o projeto pressionando F5.

Passo-2) Adicione adicione seu erro causando código em XAML um por um.

0
Laxman Marothiya

O Target Framework do arquivo .dll que você está adicionando deve ser o mesmo que o Target Framework do seu aplicativo.

0
Shuangpeng Pang

Eu estava usando xmlns: local = "using: MyRootNamespace.ChildNamespace" no cabeçalho do .xaml, e eu o transformei em xmlns: local = "clr-namespace: MyRootNamespace.ChildNamespace" ... bem, deixei o intellisense fazer o trabalho, e funcionou.

0
Ariel Altamirano

Há uma falha com o buffer dos layouts de objetos. Se alguma coisa for renomeada ou movida, ela se perderá. O que geralmente funciona para mim é criar uma classe completamente nova e copiar todo o código antigo, fazê-lo funcionar na nova classe e depois remover a classe original. Às vezes, depois de ativá-lo com o novo nome da turma, você pode tentar renomeá-lo para o nome original (mas geralmente não)

0
DanW