it-roy-ru.com

WPF: имя не существует в пространстве имен

Я создаю приложение C #/WPF с использованием VS2013, и у меня есть следующее определение класса (в той же сборке работающего приложения):

namespace MyNamespace
{
    public class MyKey
    {
        public MyKey() { }
        public string name = "";
    }
}

В MainWindow.xaml у меня есть:

<Window x:Class="MyNamespace.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyNamespace"
        Title="MainWindow" Height="350" Width="525" WindowState="Maximized" WindowStyle="None">
    <Window.Resources>
        <local:MyKey x:Key="key" />
    </Window.Resources>
...

VS продолжает сообщать, что 

Имя «MyKey» не существует в пространстве имен "CLR-имен: MyNamespace"

Есть идеи?

Постскриптум Я попробовал следующие решения (из уже опубликованных вопросов в stackoverflow), но ни одно из них не сработало:

  1. Перемещение класса в другое пространство имен, а затем использование нового пространства имен в ссылке xaml
  2. Перезапуск VS и очистка/восстановление решения
  3. очистить решение, затем переименовать его папку, затем построить решение снова
  4. изменив ссылку на:

xMLNS: локальные = "CLR-пространства имена: MyNamespace; Ассамблея ="

Правка: Дополнительная информация: Целевая архитектура: X64, целевая среда: .Net 4.5

23
Ibraheem

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

  1. Если вашей текущей целевой платформой является x64, измените на x86. Если это в настоящее время x86, измените на x64.

  2. Очистить и построить решение для новой целевой платформы.

  3. Вернитесь к нужной целевой платформе и перестройте ее. 

50
Gordon True

У меня была такая же проблема в VS2012 Express Edition. Решил проблему с помощью команды

«WDExpress/ResetSettings» в командной строке vs2012.

https://stackoverflow.com/a/33706647/4855197

2
Adeeb Arangodan

Одним из возможных решений является удаление всех файлов .dll из папки Debug и Release .

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

Удалите все файлы из папок debug и release и соберите этот проект заново, теперь добавьте ссылку на этот проект туда, куда вы хотите. Сработало отлично с моей стороны. 

1
Khawaja Asim

Обычно, когда я сталкиваюсь с этой проблемой, я замечаю, что Visual Studio перечисляет «неправильные» ошибки в списке ошибок и ставит меня на неверный путь. Просмотр фактического результата сборки в окне вывода Visual Studio показал правильную ошибку. 

Вкратце: сравните результаты сборки со списком ошибок.

0
Daniel

Запуск VS Enterprise 2017 версии 15.6.2 Таргетинг .Net 4.6.1

У меня была такая же проблема со страницей UserControl xaml, где в своих ресурсах она пыталась ссылаться на ValueConverter. Пространство имен было правильным, intellisense даже поместил бы его для вас, но дизайнер не загружал страницу, а код не компилировался. Я даже попытался переместить один из преобразователей значений из рассматриваемого файла и пространства имен и переместить его в код. VS был настолько взволнован, что утверждал, что метод InitializeComponent () в конструкторе выделенного кода не существует. 

То, что я, наконец, исправил для меня, было, когда я понял, что в классе ValueConverter отсутствует ведущий атрибут, подобный этому:

[ValueConversion (typeof (строка), typeof (десятичное число))]

Как только я добавил эту строку, я быстро очистил и скомпилировал решение, а затем оно скомпилировалось и заработало. Затем внезапно xaml смог увидеть все правила проверки и преобразователи значений в этом файле. И теперь я понял, что другие 3 преобразователя значений в этом файле также не имеют атрибута ValueConversion, и все же код все еще компилируется. Возможно, что-то о входящих типах в этом первом преобразователе было расплывчатым.

Это все еще в некоторой степени загадка. Я знаю, что должен отменить свои изменения и посмотреть, является ли ошибка воспроизводимой, но после борьбы с этим кодом большую часть дня мне надоело на него смотреть. Это был старый проект Prism, который не работал, и я обновил его до библиотек Prism 7.0. Я также попытался сбросить все настройки процессора на «Любой процессор». Он жаловался на то, что загрузчик устарел, но я проигнорировал это. Я перезагрузил и почистил все несколько раз. Я бы даже удалил папку .vs. Возможно, мне следовало бы попытаться ранее полностью удалить папки obj и bin - это то, чего я не делал.

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

0
Kevin Sherrill

У меня была похожая проблема. Для меня это исправило изменение свойств сборки проекта, которое было добавлено в качестве ссылки. Оказалось, что «цель платформы» была изменена в прошлом. Установка его на «Любой процессор» и его восстановление позволили устранить ошибку.

0
karstenp