тег не существует в пространстве имен XML - PullRequest
18 голосов
/ 22 июля 2011

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

Я получаю сообщение об ошибке для словаря ресурсов, который я делаю (и позднее объединяю), что тег 'ModelBindings' не существует в пространстве имен XML 'clr-namespace: Company.Project.Module.Folder; assembly = Company.Project .module '

Сборка, на которую я ссылаюсь, является нестандартной и содержится в решении. Мало того, но мы рассмотрели DLL, помещенную в корзину для проекта, в котором находится словарь ресурсов, и после проверки он содержит класс, на который я хочу ссылаться. Итак, я знаю, что 1. DLL находится в нужном месте для доступа и находится в ссылках. 2. DLL содержит данные, которые я хочу.

Вот некоторые фрагменты кода для словаря ресурсов

Список пространства имен

xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;assembly=Company.Project.Module"

Создание ресурса для ссылки

<modulemodel:ModelBindings x:Key="ModuleModelBindings"/>

Как и ошибки других людей, intellisense говорит, что это кошерное. ТАКЖЕ листинг xmlns был создан с автозаполнением intellisense и перепечатан вручную. Ни один не работал.

Я также пытался переместить все в app.xaml, и он все еще выдал мне ту же ошибку.

Если я удаляю тело файла ResourceDictionary, код компилируется нормально, но все привязки нарушаются.

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

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

<SharedResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;assembly=Company.Project.Module"
                    >
    <modulemodel:ModelBindings x:Key="ModuleModelBindings"/>

</SharedResourceDictionary>

если я заменю SharedResourceDictionary на ResourceDictionary, произойдет та же ошибка.

app.xaml и SharedResourceDictionary выше приведены для сравнения в пространстве имен Company.Project.Main, и в нем есть ссылки как на то место, где определен SharedResourceDictionary, так и на различные проекты модулей, которые я поместил в код выше

Решение

Похоже, это была в основном ошибка пользователя. Но это может случиться с другими. Когда я скопировал определение xmlns: moduleviewmodel из его исходного файла, мне пришлось добавить часть assembly = самостоятельно. Как я уже сказал, я сделал это сам, а также использовал автозаполнение, следующее из ввода 'xmlns: moduleviewmodel ='. Прямо перед тем, как мы нашли ошибку, мы снова попробовали автозаполнение, потому что обнаружили, что было одно из 7 пространств имен, не генерирующих ошибку. Тогда я заметил, что в пути сборки есть буква без заглавной буквы, которая должна быть. Странно то, что автозаполнение фактически вставляет эту ошибку самостоятельно. Пока мы составляли, я заметил ошибочное письмо. Более странно то, что после того, как я исправил все пути вручную, мы снова попробовали автозаполнение, и оно записало его правильно.

Понятия не имею, почему произошла ошибка автозаполнения, но с фиксированной буквой он компилируется просто отлично.

Теперь мне просто интересно, поверит ли кто-нибудь, что автозаполнение изменилось на меня!

Ответы [ 6 ]

28 голосов
/ 05 марта 2014

Согласно этой статье , вы просто делаете следующее:

FROM:

XMLNS: ZZZ = "CLR-имен: YYY; сборка = YYY"

TO:

XMLNS: ZZZ = "CLR-имен: YYY; сборка ="

оставить пустое значение для сборки =

Это решение, которое работает для меня.

14 голосов
/ 28 января 2017

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

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

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

14 голосов
/ 25 июля 2011

Похоже, это была в основном ошибка пользователя. Но это может случиться с другими. Когда я скопировал определение xmlns:moduleviewmodel из его исходного файла, мне пришлось добавить сборку = часть самостоятельно. Как я уже сказал, я сделал это сам, а также использовал автозаполнение, следующее из ввода 'xmlns: moduleviewmodel ='. Прямо перед тем, как мы нашли ошибку, мы снова попробовали автозаполнение, потому что обнаружили, что было одно из 7 пространств имен, не генерирующих ошибку. Тогда я заметил, что в пути сборки есть буква без заглавной буквы, которая должна быть. Странно то, что автозаполнение фактически вставляет эту ошибку самостоятельно. Пока мы составляли, я заметил ошибочное письмо. Более странно то, что после того, как я исправил все пути вручную, мы снова попробовали автозаполнение, и оно записало его правильно.

Я не знаю причину ошибочного автозаполнения, но с фиксированной буквой он компилируется просто отлично.

Теперь мне просто интересно, поверит ли кто-нибудь, что автозаполнение изменилось на меня!

2 голосов
/ 15 января 2018

Проверьте Предупреждения в списке ошибок, в моем случае там, где есть сообщения о неразрешенных ссылках .Net 4.5.1, в то время как целевой объект моего проекта был 4.5

1 голос
/ 30 ноября 2018

Если у вас есть пользовательский элемент управления в той же сборке, что и форма WPF, убедитесь, что вы избавляетесь от детали сборки при импорте пространства имен

Неправильный импорт: xmlns: usercontrol = "clr-namespace: CCFARKS.UserControls; assembly = CCFARKS"

Corret: xmlns: usercontrol =" пространство имен clr: CCFARKS.UserControls "

1 голос
/ 30 декабря 2014

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

Я пытался использовать класс из сборки A, поэтому я

1) добавил ссылку на эту сборку в свой проект,

2) добавлена ​​ссылка на сборку B, которая используется сборкой A, в мой проект

3) добавлена ​​в мой XAML

 xmlns:assemblyA="clr-namespace:A;assembly=A"

3) добавлена ​​вмой код

using A;

Это не сработало, у меня возникла ошибка "Тег не существует".

Что помогло, так это добавление

using B;

в мой код, хотя я не использую напрямую ничего из сборки B.

...