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

87

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

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

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

Файлы классов .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.Controls".

Не знаете, что не так или как его исправить?

  • 9
    Перезапуск визуала сработал для меня. (никогда не стоит недооценивать силу перезапуска)
  • 1
    Небольшая помощь для тех, кто борется с этим: убедитесь, что ваш класс публичный.
Теги:
xaml
wpf
visual-studio-2012

28 ответов

172
Лучший ответ

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

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

  • В VS щелкните правой кнопкой мыши ваше решение → Свойства → Свойства конфигурации

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

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

  • 0
    Это также исправило проблему в VS 2014, обновление 4
  • 0
    Это работало и для меня, но мне также пришлось перезапустить VS, чтобы очистить список ошибок? Weird.
Показать ещё 19 комментариев
44

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

например: -

xmlns:Local="clr-namespace:MusicPlayer.Controls;assembly=MusicPlayer"
  • 1
    Поначалу казалось, что она решила мою проблему, но все равно выдает ту же ошибку. Тем не менее, теперь я даже не могу построить решение больше.
  • 6
    @bouke Очистите решение и восстановите его
Показать ещё 2 комментария
24

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

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

  • 0
    У меня это повторилось, и я могу подтвердить, что это решает проблему для меня. Вы можете вернуться к x64 после того, как соберете его в x86.
  • 0
    Это сработало и для меня в VS 2012 ... после нескольких часов попыток выяснить что-то логичное. Спасибо, Том!
Показать ещё 5 комментариев
23

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

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

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

Процесс:

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

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

  • 0
    Отлично. Единственное решение, которое действительно работает.
  • 5
    К сожалению, ничего не изменило для меня. Все еще сталкиваюсь с этим раздражающим спустя почти целый год. : /
Показать ещё 2 комментария
19

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

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

  • 2
    Обратите внимание, что выполнение сборки / компиляции решило эту проблему для меня, хотя у меня не было других связанных с этим ошибок компиляции. Похоже, что окна XAML не всегда знают о новых классах, пока вы не выполнили компиляцию.
  • 1
    Это был лучший совет для меня, но так как @ HK1 иногда в списке ошибок компилятора нет других записей ... в списке нет ошибок, но есть и другие ошибки. Чтобы увидеть их, прокомментируйте или удалите строки, помеченные ошибкой пространства имен, снова скомпилируйте, а затем вы увидите другие ошибки компилятора. Измените их, и строки, отмеченные ошибкой пространства имен, будут в порядке, когда вы их восстановите.
Показать ещё 1 комментарий
7

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

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

  • 2
    Это был случай для меня, я переместил его на свой виртуальный компьютер (на котором я развиваюсь) и бум без проблем. Спасибо!
  • 0
    Это был случай для меня, как мне кажется. Перемещение их на локальный диск (вместо общего сетевого ресурса - как это было настроено Parallels для объединения как файловой системы Mac, так и Windows) - решило проблему.
5

Возможно, другое решение для компиляции проекта, но ошибка XAML:

  • В решении исследуйте проект node, содержащий xaml
  • Щелкните правой кнопкой мыши проект и выберите "Выгрузить проект"
  • Щелкните правой кнопкой мыши проект и выберите "Обновить проект", Убедитесь, что ваш проект по-прежнему выбран как "проект запуска". Если нет:
  • Щелкните правой кнопкой мыши проект и выберите "Сделать как проект запуска"

Не нужно перестраивать или закрывать визуальную студию.

  • 0
    этот работает!
3

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

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

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

2

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

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

2

Та же самая проблема поражает Visual Studios 2013, Service Pack 4. Я также попробовал это с помощью предварительного просмотра Visual Studios 2015 с теми же результатами.

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

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

2

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

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

Я думаю, что это было потому, что я играл с настройками в Solution → Properties > Configuration Properties

Наконец я решил проблему с двумя заданиями:

  • Проверка всех флажков в столбце сборки на странице: Решение → Свойства → Свойства конфигурации
  • Изменение конфигураций решений от Отладки до Отпустите или наоборот.

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

1

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

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

В проекте Models.Monitor в одном из xaml я включил следующее пространство имен: XMLNS: монитор = "CLR-имена: Models.Monitor"

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

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

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

Наконец, я сдался, и, когда работа вокруг перемещала UserControl, я пытался использовать ее в другом пространстве имен: 'ModelsMonitor'. После этого я смог скомпилировать.

  • 0
    да, это работает с этим обходным путем.
1

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

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

1

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

  • Щелкните правой кнопкой мыши файл DLL в проводнике Windows и выберите "Свойства".
  • В нижней части вкладки "Общие" нажмите кнопку "Разблокировать" или установите флажок.

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

  • 0
    Это сработало для меня - я скачал проект с Dropbox и получил ошибку. Мне также пришлось удалить ShadowCache
1

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

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

0

Я добавил добавленную сборку как проект - сначала удалил ddl, который был добавлен специально к ссылкам на dll - который это сделал.

0

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

Я чувствую себя глупо по этому поводу, но в моем случае я разрывал пользовательский элемент управления и в результате имел всевозможные ошибки в связанных классах. Поскольку я пытался исправить их все, я начал с рассматриваемых ошибок, не осознавая, что xaml полагается на встроенные сборки для поиска этих ссылок (в отличие от кода на С#/vb, который может решить его даже до того, как вы соберете).

0

У меня также много проблем с этим! Intellisense помогает мне заполнить пространство имен и все остальное, но компилятор плачет. Я перепробовал все, что нашел в этой и других темах. Однако, в моем случае, что помогло в конце, это написать что-то вроде этого: xmlns: util = "clr-namespace: LiveSpielTool.Utils; assembly ="

Оставляя имя сборки пустым. Понятия не имею почему. Но это было упомянуто здесь. Я должен добавить, что я разрабатываю сборку, поэтому атрибут сборки может иметь смысл. Но ввод названия сборки не сработал. Так странно.

0

В моем случае пространство имен и класс были написаны одинаково, поэтому, например, одно из моих пространств имен было

firstDepth.secondDepth.Fubar

который содержит свои собственные классы (например, firstDepth.secondDepth.Fubar.someclass)

но у меня также был класс ' Fubar ' в пространстве имен

firstDepth.secondDepth

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

Не делай этого

0

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

  • 1
    Ваше предложение является значительным изменением, которое может даже не быть возможным для ОП, если они нацелены на определенную среду. В любом случае это маловероятно, чтобы быть причиной проблемы, и если бы она решила проблему для вас, я бы предположил, что ваша настоящая проблема не соответствовала конфигурациям проекта, что проявилось бы по-разному в отношении проблемы, показанной здесь.
0

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

0

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

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

0

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

  • 0
    Этот ответ предоставляется как минимум в два раза выше.
0

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

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

0

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

Чтобы уточнить: дизайнер WPF может сообщить: "Имя XXX не существует в пространстве имен...", даже если имя существует в пространстве имен, а проект строит и работает очень хорошо, если событие post-build удаляет DLL проекта из папки сборки (bin\Debug, bin\Release и т.д.). В Visual Studio 2015 у меня есть личный опыт.

0

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

0

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

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

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

-2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню