имя не существует в пространстве имен clr-namespace



У меня есть небольшое приложение WPF, которое использовалось для компиляции просто отлично, но больше нет. Я не могу сказать, в какой момент он перестал строиться. Он просто работал нормально один день, а на следующий это не так.



вот структура проекта:
enter image description here

Нет никаких других проектов или внешних ссылок, кроме стандартных DLL .net.



вот пользовательский элемент управления, где проблема возникла:



<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}">


и вот ошибка I получить:
http://i48.tinypic.com/5u1u8w.png



обратите внимание, что это не только один файл на скриншоте, но и все ссылки, которые я добавляю аналогичным образом в xaml во всех файлах пользовательского элемента управления/окна в этом проекте.



Итак, файл есть, пространство имен в файле правильно, имя пространства имен / класса в файле xaml (насколько я понимаю) правильно. Я получаю intellisense, когда я набираю xaml, чтобы он находил файлы в порядке, но не тогда, когда он компилируется.



наиболее общим решением для этого в других сообщениях была версия .net framework. В настоящее время он установлен на .Net Framework 4 как для моего основного, так и для тестового проекта. Полная версия не профиль клиента.



вот что я думаю, что я испортил:
В configuration manager оба проекта имеют свою платформу, установленную на любой процессор, но в какой-то момент при попытке решить эту проблему я заметил, что основной проект был установлен на x86, а тестовый проект был установлен на любой процессор. Поэтому я добавил любой процессор вручную для основного проекта в Configuration manager. Однако я честно не знаю, правильно ли я это сделал или даже если я должен это сделать. Итак, как дополнительный вопрос, есть ли способ сбросить configuration manager в состояние по умолчанию? Будет ли это что-нибудь сказать о главной проблеме? Я не знаю, всегда ли основной проект был установлен на x86 или нет, или если я каким-то образом изменил его на x86, а затем он сломался. Как уже упоминалось, этот проект компилировался просто отлично на некоторое время.



любой предложения? Я отвечу на более подробные вопросы о коде или что-то еще, как вы их задаете, а не бессвязно здесь:)

1467   22  

22 ответов:

каждый раз, когда это случалось со мной, я просто перезапускал visual studio, перестраивал решение, и оно работало просто отлично.. не могу сказать, почему

в дополнение к сообщению" не существует в пространстве имен", я также получал сообщение от дизайнера о том, что он не может отображать окно для целей x64 и ARM.

Я только что обнаружил, что переключение сборки в режим x86, выполнение решения для перестройки, а затем переключение обратно в режим x64, а затем повторное восстановление исправляет [обе] проблемы.

просто перестроить решение x64 ничего не сделал.

Это то, что работало для меня на Visual Studio 2012 (обновление 3).

  • Перезапустить Visual Studio
  • добавить текущую сборку в объявление пространства имен xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
  • Build ->Build Solution

что я нашел, что помогло (особенно если эта ошибка возникает в App.xaml) является закомментируйте ссылку(ы), которая дает вам проблемы, перестроить, а затем раскомментировать. Я думаю то, что это делает, позволяет фактически построить весь проект, а не останавливать сборку при ошибке.

из того, что я могу собрать, приложение пытается построить файлы в определенном порядке, так что когда App.xaml или предположительно любые другие ошибки файла класса в ссылке, файл, который вызывает ошибку не правильно составлен, поэтому он не находит файл в этом пространстве.

перестроить решение (иногда чистый, а затем построить работает лучше). Затем просмотрите свой список ошибок, прокрутите его до самого низа, и он, скорее всего, укажет на ошибку, которая не позволяет вашей сборке компилироваться, а компилятор XAML, скорее всего, использует кэшированную версию сборки, а не новую, которую вы хотите построить.

у меня была аналогичная проблема. В моем случае, я должен был сделать следующее

  • удалите ссылочную разметку из xaml (в этом примере <local:HistoryViewModel x:Key="ViewModel"/>)
  • построить класс ( в этом примере файла, который содержит HistoryViewModel класс )
  • после того, как его построили, добавить ссылки разметки в XAML
  • снова построить

выше метод работал для меня.

Что сработало для меня: - Переключение конфигурации решения от отладки к выпуску - Переключение обратно конфигурации с выпуска на отладку

ни одно из решений работал для меня. Я исправил это так:

  • удалите dll библиотеки из ссылок
  • загрузите исходный код библиотеки (а не только dll-файл)
  • создайте проект библиотеки, чтобы получить новый dll-файл
  • добавьте новый dll-файл в ссылки основного проекта

эта проблема ходила по кругу, теряя несколько часов. Я переместил отдельную библиотеку dll пользовательского элемента управления в проект, чтобы она была скомпилирована в проекте, а не в dll. Это сломало весь проект, поэтому я тщательно проверил все пространства имен, пути и имена файлов. Пробовал удалять obj-файлы, переключаясь между выпуском и отладкой, между x86 и AnyCPU. Открыв все сбережения, перекомпилировать все равно не радость.

помните, что у вас была аналогичная проблема раньше, ошибка, отмеченная в VS2013, не была напрямую связана с тем, где я должен был изменить XAML, но с помощью

x:Name="myControl"

на всех элементах управления, а не

Name="myControl"

исправил.

вот странный пример подобного:

<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>

будет компилироваться (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>

выдает ошибку " тип Ui не найден в Gtl.Пользовательский интерфейс.Gtl " (и я уверяю вас, что метод обработчика существует в коде). Обходной путь заключается в добавлении обработчика в конструктор класса, но c'Mon Microsoft, wtf продолжается?

я столкнулся с той же проблемой, когда пытался вызвать пространство имен в xaml. показывал, что класс недоступен в пространстве имен. Я много искал. Наконец-то я нашел этот вопрос был с против. Я использую против 2013. Я попробовал ниже шаги:

  1. Build-->Configuration Manager--> Active Solution Platform -- > изменен на x64 и x86 и любой процессор.
  2. закрыл VS и открыл снова.
  3. изменить

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    до

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    

Я изменил целевую платформу мое приложение ".Net Framework 4.5" на ".Net Framework 4.6", и это сработало!

  • Я бы рекомендовал переименовать x:Key="ViewModel" может быть, есть глюк
  • и если ты типа local: показывает ли вам VS HistoryViewModel?
  • также проверьте, если ваш Class - это public

столкнулся с этой проблемой сегодня с Visual Studio 2017 Community Edition. Попробовал все предложения здесь (сброс VS 2017, изменен с x64 на x32 и обратно и т. д. и т. д.) и из других источников безрезультатно. Intellisense знает, что все есть, но я получал ту же ошибку каждый раз.

в любом случае, мое решение оказалось очень простым ... они не всегда, когда вы потратили пару часов на эту проблему!

в принципе, я сделал следующее ...

  1. удалить оскорбительный код из файла xaml (всего 3 строки в моем случае)
  2. построить проект, так что вы получите успешный построить
  3. в этот момент макет волшебным образом появился в окне конструктора, что было хорошим знаком!
  4. повторно вставил код, который я удалил в пункте 1. в том числе xmlns: entry
  5. в этот момент Вы не должны получить никаких синих закорючек ... надеюсь
  6. построить проект снова

Это кажется, что, получив успешную сборку, он должен сбросить "что-то" в VS и/или сборке. После успешной сборки попробуйте снова вставить свой код.

надеюсь, это поможет кому-то:)

просто запустить анализ кода Build меню

Это постоянная проблема для меня. Один раз я нашел решение, глядя в предупреждение вкладке. Это была проблема с версией .NET framework и в нем говорилось следующее:

предупреждение 9 первичная ссылка "myDll" не может быть решена, потому что он был построен против ".NETFramework, Version=V4.5.2" framework. Это выше, чем в настоящее время адресная база ".NETFramework версии=В4.0".

есть глюк с их буферизацией макетов объектов. Если что-то переименовывается или перемещается, оно теряется. Что обычно работает для меня, так это создать совершенно новый класс и скопировать весь старый код, заставить его работать над новым классом, а затем удалить исходный класс. Иногда после того, как вы получите его и запустите с новым именем класса, вы можете попробовать переименовать его обратно в исходное имя (но обычно нет)

Я использовал xmlns: local= " using: MyRootNamespace.ChildNamespace "в заголовке.xaml, и я превратил его в xmlns:local="clr-namespace:MyRootNamespace.ChildNamespace"... ну, я просто позволил intellisense сделать работу, и это сработало.

проблема заключается в том, что при создании целевого объекта x86 выходной путь для конкретного проекта устанавливается в bin\x86\Debug. Похоже, что смесь не нравится. Кажется, его интересует только то, что в bin\Debug.

Если вы изменили свой выходной путь(ы) для проекта x86 на bin\debug например, то я уверен, что вы найдете его будет работать. Ну, работает для меня в любом случае:)

целевая структура .dll-файл, который вы добавляете, должен быть таким же, как и целевая структура вашего приложения.

эта ошибка обычно возникает, когда проект не был успешно построен во время последней сборки.

Шаг-1) Сначала удалите все ошибки, вызывающие код из XAML или .cs файл и построить и запустить проект, нажав клавишу F5.

Шаг-2) Добавить добавьте код, вызывающий ошибку в XAML один за другим.

Я обнаружил, что запуск команды "выполнить анализ кода" перестраивает все и почти всегда устраняет проблему (щелкните правой кнопкой мыши проект > анализ > выполнить анализ кода). Это также обычно перестраивает файлы ресурсов также Так, что строки и т. д. может быть найден.

Comments

    Ничего не найдено.