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

84

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

Вот структура проекта:

введите описание изображения здесь

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

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

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

И вот ошибка, которую я получаю: http://i48.tinypic.com/5u1u8w.png

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

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

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

Вот что, как мне кажется, я напутал: в диспетчере конфигурации у обоих проектов платформа установлена ​​на Any CPU, но в какой-то момент, пытаясь решить эту проблему, я заметил, что основной проект был установлен на x86, а тестовый проект был установлен на Any ПРОЦЕССОР. Поэтому я вручную добавил Any CPU для основного проекта в диспетчере конфигурации. Однако я, честно говоря, не знаю, правильно ли я сделал или даже должен ли я это сделать. Итак, в качестве дополнительного вопроса, есть ли способ сбросить диспетчер конфигурации до состояния по умолчанию? Будет ли это что-нибудь сказать о главной проблеме? Я не знаю, был ли основной проект всегда установлен на x86 или нет, или я как-то изменил его на x86, а затем он сломался. Как уже упоминалось, этот проект некоторое время компилировался нормально.

ardal
источник
К вашему сведению, вы можете прочитать ProgressTimeSpentUserControl.xaml. Возможно, вы захотите поработать лучше, чтобы размыть его;)
It'sNotALie.
Ничего особенного :) Это просто временный файл, в котором я тестировал некоторые вещи, а остальные являются частью проекта с принадлежащими моделями представлений, поэтому мой ОКР сказал мне пометить его как не относящийся к делу;)
ardal
2
У меня была очень похожая проблема 2 дня назад - я возился с диспетчером конфигурации, пытаясь настроить все для сборки как «любой процессор», а не x86, и он прекратил сборку. Я обнаружил, что сделал две вещи - во-первых, я оставил его в режиме выпуска, а во-вторых, диспетчер конфигурации сборки, сборка в некоторых случаях не была помечена для сборки. Мое исправление заключалось в том, чтобы пройти через все доступные режимы (x86, смешанные платформы и любой ЦП) и настроить все сборки для сборки. Это звучит как одна из тех вещей, о которых вы будете бить себя за то, что не задумались, когда обнаружите, что не так!
Джей
Аналогичный вопрос (с рабочим ответом): stackoverflow.com/questions/28216096/…
Олекса
Для всех, кто приземлился здесь в 2018 .NET 4.6.1, я перезапустил VS, затем перестроил, и он начал работать. Определенно потратил больше времени, чем должен был думать, что у меня где-то есть типаж.
Mwspencer

Ответы:

143

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

гил кр
источник
17
Следует добавить, что только когда я перезапускаю VS с правами администратора, проект успешно создается. С обычными разрешениями даже перезапуск и восстановление решения не помогли.
Sevenate
1
Просто сохраните решение, которое вызывает проблему. Запустите VS в режиме администратора и запустите «перестроить все» из файла решения. это сработало. очень жутко.
pollaris 02
12
Печально видеть, что 5 лет спустя эта проблема все еще не решена. В VS 2017 существует та же проблема, и то же решение все еще работает!
CodeHacker
@gil kr У меня были похожие проблемы с xamarin и его XML. Я обнаружил, что перемещение проекта из сетевой папки в локальную папку устранило проблему. Интересно, так ли это здесь?
vdidxho 01
3
Это не решило мою проблему даже при запуске с правами администратора.
MindRoasterMir
30

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

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

Простое восстановление решения x64 ничего не дало.

Джерри
источник
5
Еще один шаг. Вам нужно перестроиться на x86, а затем открыть xaml в дизайнере. И только потом возвращайся на x64.
Dzienny 06
2
Я попытался перезапустить Visual Studio, а затем перестроить, но все равно получал ту же ошибку. @Jerry - ваше решение сработало для меня в VS2012.
Barrie
Джерри, звучит сомнительно, но ваше решение работает! Я скомпилировал свой проект для AnyCPU, но каким-то образом скомпилировал под x86, а затем решил эту проблему. Я подозреваю, что AnyCPU может вернуться к x86, но из-за ошибки в VS эта часть кода не была создана, если не скомпилировать ее под x86.
Уэйн Ло
Да, любые ДРУГИЕ ошибки, помимо «не существует в пространстве имен», должны быть сначала устранены.
pollaris 03
Все еще случилось со мной в VS2017. Закрытие и повторное открытие VS не помогло. Но ваше решение сработало.
Gordon Slysz
14

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

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

Jaysoncopes
источник
3
Вы имели право идея , когда вы сказали: the app is trying to build the files in a certain order. Это заставило меня заглянуть в свой .csprojфайл. Было App.xaml.csпервое место. Затем я переместил его под файл, который показал эту ошибку, перестроил, и ошибка исчезла. БЛАГОДАРЯ!
Стефан
Это решение сработало для меня, когда другие нет. спасибо
RamWill
12

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

  • Перезапустите Visual Studio
  • Добавить текущую сборку в объявление пространства имен xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
  • Build -> Build Solution
Леон Стори
источник
у меня сработало VS2015 Professional update3, спасибо :)
EricG
Можете проверить, он работает и на Visual Studio 2019.
Twenty
9

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

Джон К
источник
7

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

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

Вышеупомянутый метод сработал для меня.

чанк
источник
См. Мой ответ, чтобы понять, почему это устранило вашу проблему.
jaysoncopes
6

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

Hugues
источник
Странный. Это сработало и для меня. Также делал чистые сборки в каждом выпуске.
GeoffCoope
4

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

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

По сути, я сделал следующее ...

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

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

DynamicL
источник
На самом деле это было единственное, что у меня сработало. Вот почему я ненавижу VisualStudio с XAML. Такой хакерский вид игры с конфигурациями неприемлем.
Goku
3

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

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

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

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

x:Name="myControl"

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

Name="myControl"

починил это.

Растущая луна
источник
Просто столкнулся с той же проблемой, снова оставив x: Обратите внимание, что это происходит только с моим собственным пользовательским элементом управления.
Растущая Луна,
Ты мой герой.
Holden
3

Я изменил Target Framework My Application с ".Net Framework 4.5" на ".Net Framework 4.6", и это сработало!

амир стек
источник
Я изменил свою цель с 4.6.1 на 4.6, и это тоже сработало.
GisMofx
2

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

<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.Ui.Gtl» (и я уверяю вас, что метод обработчика существует в коде программной части). Обходной путь - добавить обработчик в конструктор класса, но давай, Microsoft, wtf продолжается?

Джулиан Голд
источник
Я не согласен с приведенными выше комментариями. Такой вид «расширения контекста» часто бывает полезен для определения причины такой ошибки, которая не ТОЛЬКО вызвана условиями OP.
CJBrew
2

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

  1. Сборка -> Диспетчер конфигураций -> Платформа активных решений -> Изменено на x64 и x86 и любой процессор.
  2. Закрыл VS и снова открыл.
  3. + Изменить

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    к

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    
Абхишек Биртарей
источник
2

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

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

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

Лаксман Маротия
источник
1
  • я бы рекомендовал переименовать x:Key="ViewModel" возможно, есть глюк
  • и если вы local:введете, покажет ли VSHistoryViewModel ?
  • Кроме того, проверьте , если ваша ClassISpublic
WiiMaxx
источник
1

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

Ана Эль Бембо
источник
1

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

Джефф
источник
Но, как я недавно обнаружил, даже это не сработает. Мне пришлось закрыть VS и перезапустить. О, ну ...
Джефф
1

Пробовал все решения в этой теме, но ни одно не помогло. Оказалось, что это связано с настройкой решения. Мое приложение WPF было настроено на сборку для X64 из-за некоторых собственных зависимостей, которые этого требуют, но конфигурация решения по-прежнему была установлена ​​на AnyCPU для проекта. Создание новой конфигурации X64 для проекта в диспетчере конфигурации решения позволило конструктору XAML наконец распознать мой тип и пространство имен.

Xeaz
источник
1

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

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

Махеш Анакали
источник
0

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

Предупреждение 9 Не удалось разрешить первичную ссылку «myDll», поскольку она была создана на основе платформы «.NETFramework, Version = v4.5.2». Это более поздняя версия, чем текущая целевая платформа .NETFramework, Version = v4.0.

Андре Сантало
источник
0

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

DanW
источник
0

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

Морти
источник
0

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

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

РобМ
источник
0

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

Шуангпенг Пан
источник
0

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

Пробовал это в Visual Studio 2019:

Щелкните правой кнопкой мыши свое решение -> Свойства -> Свойства конфигурации, затем измените конфигурации проекта с «Отладка» на «Выпуск» или наоборот.

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

Нитиш Кумар Пал
источник