Имя не существует в ошибке пространства имен в XAML


используя VS2012 работая на a VB.NET приложение WPF. У меня есть простой MusicPlayer учебник приложение, которое я использую, чтобы узнать WPF. Я конвертирую версию учебника на C# в VB.NET шаг за шагом.

он имеет 2 класса в приложении, которые находятся в одном пространстве имен. Я могу ссылаться на пространство имен в XAML, но когда я пытаюсь ссылаться на объект класса в XAML, я получаю ошибку, и я не могу скомпилировать.

странно, что IntelliSense работает отлично подходит как для ссылки на пространство имен через xmlns:c= tag, так и при вводе объекта класса с помощью <c: Но объект подчеркнут и генерируются ошибки при попытке построить или работать в конструкторе.

The .файлы класса vb находятся в папке с именем Controls. Основное корневое пространство имен проекта намеренно оставлено пустым. Класс кодируется следующим образом...

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

xaml выглядит так

(пространство имен, определенное в <Window > тег

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

(объект определен в <Grid>)

  <c:UpdatingMediaElement Name="MyMediaElement" />

(ошибка отображается) Имя " UpdatingMediaElement "не существует в пространстве имен" clr-namespace:MusicPlayer.Контроли."

не уверен, что это неправильно или как это исправить?

24 85

24 ответа:

когда вы пишете свой код wpf и VS, скажите, что"имя ABCDE не существует в пространстве имен clr-namespace:ABC". Но вы можете полностью построить свой проект успешно, есть только небольшое неудобство, потому что вы не можете видеть дизайн пользовательского интерфейса (или просто хотите очистить код).

попробуйте сделать это:

  • в VS, щелкните правой кнопкой мыши на вашем решении - > свойства - > свойства конфигурации

  • открывается новый диалог, попробуйте изменить конфигурацию проекта с Debug на Release или наоборот.

после этого заново создайте свое решение. Это может решить вашу проблему.

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

ex: -

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

попробуйте изменить целевую платформу сборки на x86 и построить проект.

Я заметил через Subversion, что я, по-видимому, изменил цель платформы сборки проекта на x64. Это было единственное изменение, которое я сделал. После внесения этого изменения код работал некоторое время, прежде чем он начал показывать ту же ошибку, что и вы. Я изменил цель платформы на x86 для тестирования, и внезапно мой дизайнер снова работал. Впоследствии я изменил его обратно на x64, и проблема полностью исчез. Я подозреваю, что дизайнер создает какой-то кэшированный код в x32 и изменение платформы сборки x64 нарушает его при внесении изменений в код.

Я видел, что эта проблема исчезла, очистив теневой кэш дизайна Xaml. У меня была проблема с обновлением Visual Studio 2015 1.

в Visual Studio 2015 кэш находится здесь:

%localappdata%\Microsoft\VisualStudio.0\Designer\ShadowCache

процесс:

  1. щелкните правой кнопкой мыши на решении в обозревателе решений и выберите "чистое решение"
  2. Завершение Работы Visual Studio
  3. удалить папку ShadowCache
  4. снова открыл Visual Studio проект
  5. перестроить решение

и вуаля больше нет ошибок пространства имен.

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

поэтому не обращайте внимания на эту ошибку напрямую и сосредоточьтесь на другие ошибки в первую очередь.

Не знаю, поможет ли это кому-нибудь еще

Я новичок в WPF и все еще новичок с VB.net -так что я предполагал, что получение этой ошибки было вызвано тем, что я делал саммит глупо........ предположим, что я действительно был! Мне удалось избавиться от него, переместив мой проект с общего диска на один из моих локальных дисков. Ошибка исчезла, проект компилируется совершенно без дальнейших проблем-пока. Похоже, VS2015 все еще имеет проблемы с проектами, проводимыми на общем диске.

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

  1. в solution explore, на узле проекта, который содержит xaml
  2. Правой Кнопкой Мыши на проекте и выберите выгрузить проект'
  3. Правой Кнопкой Мыши на проекте и выберите перезагрузить проект' Убедитесь, что ваш проект по-прежнему выбран как "проект запуска". Если нет :
  4. Правой Кнопкой Мыши на проекте и выберите назначить запускаемым проект'

нет необходимости перестраивать или закрывать visual studio.

Иисус... Это все еще проблема пять лет спустя в Visual Studio 2017. Поскольку я новичок в WPF, я был уверен, что проблема была как-то меня, но нет, все скомпилировано и работает правильно.

Я попытался перестроить, очистить и перестроить, переключаясь между выходом x86/x64, перезагрузкой Windows, очисткой папки ShadowCache, добавлением ";assembly={my main assembly name}" в объявление пространства имен XML, ничего не сработало! Единственное, что сделал:

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

у меня была та же проблема , и в моем случае представление дизайна разметки попросило меня перестроить решение и не показывало мне макет формы с этим сообщением: Design view is unavailable for x64 and ARM target platforms или Build the Project to update Design view.

он не решается путем перестроения решения (ни представление конструктора, ни ошибка "имя не существует в пространстве имен")

Я думаю, это потому, что я играл с настройками на решение -> свойства - > свойства конфигурации

Я, наконец, решен проблема с 2 заданиями:

  1. установка всех флажков в столбце построить страницы: решение - > свойства - > свойства конфигурации
  2. изменение конфигурации решения от Debug до релиз или наоборот.

Я думаю, что это ошибка в Visual Studio2012 Update 2.

та же проблема поражает Visual Studios 2013, пакет обновления 4. Я также попробовал его с Visual Studios 2015 Preview с теми же результатами.

Это просто ограничение визуализатора WPF, которое команда Visual Studios не исправила. Как доказательство, построение в режиме x86 включает визуализатор, а построение в режиме x64 отключает его.

Как ни странно intellisense работает для Visual Studios 2013, пакет обновления 4.

недавно у меня была эта проблема с использованием VS 2015 Update 3 для моего проекта WPF в .NET 4.6.2. Копия моего проекта была в сетевая папка, я переместил его локально, и это решило проблему.

Это может решить другие проблемы, так как похоже, что VS 2015 не любит сетевые пути. Еще одна проблема, которая является большой проблемой для них, - это синхронизация репозиториев git, если мой проект находится в сетевом пути, также решается путем его локального перемещения.

похоже, что эта проблема может быть решена с помощью различных "уловок."

в моем случае я строил/перестраивал / очищал все решение, а не только проект, над которым я работал в рамках решения. Как только я нажал "построить [мой проект]", сообщение об ошибке исчезло.

решение для меня состояло в том, чтобы разблокировать библиотеки DLL сборки. Сообщения об ошибках, которые вы получаете, не указывают на это, но конструктор XAML отказывается загружать то, что он называет "изолированными" сборками. Вы можете увидеть это в окне вывода при построении. Библиотеки DLL блокируются, если они загружаются из интернета. Чтобы разблокировать стороннюю сборку DLL:

  1. щелкните правой кнопкой мыши на DLL-файле в Проводнике Windows и выберите Свойства.
  2. В нижней части вкладки общие нажмите Кнопка или флажок" разблокировать".

Примечание: только разблокировать DLL, если вы уверены, что они безопасны.

в моем случае, пользовательский элемент управления был добавлен в основной проект. Я пробовал различные решения, но безрезультатно. Либо я получу недопустимую разметку, но решение будет компилироваться и работать, или я добавлю xmlns:c="clr-namespace: MyProject;assembly=MyProject", а затем разметка будет отображаться, но я получу ошибку компиляции, что тег не существует в пространстве имен XML.

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

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

в моем случае решение имело два проекта, Один из которых содержал модели (скажем, имя проекта и сборки было модели) и другой, содержащий представления и модели представления (в соответствии с нашим соглашением: проект, имя сборки и пространство имен по умолчанию были - модели.Монитор). модель.Монитор ссылочных моделей проект.

в модели.Проект монитора, в одном из xaml я включил следующее пространство имен: xmlns: monitor= " clr-пространство имен: модели.Монитор"

Я подозреваю, что MsBuild и Visual Studio тогда ошибались, поскольку они пытались найти тип "монитор" в сборке "модели". Чтобы решить я попробовал следующее:

  1. xmlns: monitor= " clr-пространство имен: модели.Monitor; assembly= " - допустимо, если пространство имен в той же сборке, что и в https://msdn.microsoft.com/en-us/library/ms747086 (v=vs.110). aspx
  2. также попробовал явное объявление пространства имен: xmlns: monitor= " clr-пространство имен: модели.Монитор; сборка=модели.Монитор"

ни один из вышеперечисленных не работал.

наконец-то я сдался, и как обойти переместил UserControl, который я пытался использовать, в другое пространство имен: 'ModelsMonitor'. Я смог скомпилировать нормально после что.

VB.NET не добавляет автоматически информацию о пространстве имен на основе структуры папок, как это происходит в C#. Я думаю, что я прохожу через тот же учебник, что и вы (научите себя WPF за 24 часа), и делаю то же самое преобразование в VB.

Я обнаружил, что вы должны вручную добавить информацию о пространстве имен в и класс XAML и XAML.За код VB, чтобы иметь возможность использовать пространства имен, как описано в книге. Даже тогда VB не назначает автоматически Пространство имен для сборки, как это происходит в VB.

здесь есть еще одна статья, в которой показано, как включить это в шаблоны проекта, чтобы он автоматически создавал информацию о пространстве имен - автоматически добавить пространство имен при добавлении нового элемента

на странице свойств решения проверьте платформу сборки, которая содержит " UpdatingMediaElement "и assmeblies, которые содержат любой из суперклассов и интерфейсов, из которых" UpdatingMediaElement " подклассы или реализует. Похоже, что платформа всех этих сборок должна быть "AnyCPU".

другая возможная причина: событие после сборки удаляет DLL проекта из папки сборки.

чтобы уточнить: конструктор WPF может сообщить "имя XXX не существует в пространстве имен..."даже если имя не существует в пространстве имен и проект строит и работает нормально Если событие после сборки удаляет DLL проекта из папки сборки (bin\Debug, bin\Release и т. д.). У меня есть личный опыт работы с этим в Visual Studio 2015.

хорошо, так что ни один из этих советов не работал для меня, к сожалению. Я смог в конечном итоге решить эту проблему. Похоже, что Visual Studio не очень хорошо работает с сетевыми дисками. Я решил эту проблему, переместив проект с общего диска на мой локальный и перекомпилированный. Больше никаких ошибок.

попробуйте проверить ссылки на сборку. Если у вас есть желтый восклицательный знак на ссылки проекта есть проблема, и вы получите все виды ошибок.

Если вы знаете, что ссылка на проект верна, проверьте целевую структуру. Например, наличие проекта, использующего ссылку на фреймворк 4.5, проект с фреймворком 4.5.2 не является хорошей комбинацией.

добавление в кучу.

мое имя сборки приложения WPF было таким же именем сборки, как и указанная dll. Поэтому убедитесь, что у вас нет повторяющихся имен сборок в любом из ваших проектов.

У меня было решение, хранящееся в сетевом ресурсе, и каждый раз, когда я его открывал, я получал предупреждение о ненадежных источниках. Я переместил его на локальный диск, и ошибка "пространство имен не существует" также исчезла.

также попробуйте щелкнуть правой кнопкой мыши на вашем проекте - > свойства и изменить цель платформы на любой процессор и перестроить, он будет работать. Это сработало для меня

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