it-roy-ru.com

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

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

Вот структура проекта:
enter image description here
Нет никаких других проектов или внешних ссылок, кроме стандартных .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 как для основного, так и для тестового проекта. Полная версия, а не профиль клиента.

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

Какие-либо предложения? Я отвечу на более подробные вопросы о коде или о чем угодно, когда вы их задаете, а не обсуждаете здесь :)

60
ardal

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

97
gil kr

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

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

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

29
Jerry

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

  • Перезапустите Visual Studio
  • Добавить текущую сборку в объявление пространства имен xmlns:framework="clr-namespace:TimeRecorder.Framework;Assembly=MyAssembly
  • Build -> Build Solution
11
Leon Storey

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

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

9
jaysoncopes

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

8
John C

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

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

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

7
Chandru

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

5
Hugues

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

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

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

2
amir stack

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

<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, что происходит?

2
Julian Gold

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

  1. Build -> Configuration Manager -> Active Solution Platform -> Изменено на x64 и x86 и любой ЦП.
  2. Закрыл ВС и снова открыл.
  3. + Правка

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    в

    xmlns:VM="clr-namespace:MyFirstAppViewModel;Assembly=ViewModel"
    
2
Abhishek Birtharey

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

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

x:Name="myControl"

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

Name="myControl"

починил это.

2
Moon Waxing
  • я бы порекомендовал переименовать x:Key="ViewModel" возможно есть глюк
  • и если вы введете local:, VS покажет вам HistoryViewModel
  • также проверьте, является ли ваш Classpublic
1
WiiMaxx

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

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

В основном я сделал следующее ...

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

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

Надеюсь, это поможет кому-то :)

1
DynamicL

Просто запустите анализ кода из Build menu 

1
Ana El Bembo

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

0
Jeff

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

0
Xeaz

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

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

0
RobM

Это постоянная проблема для меня. Однажды я нашел решение, глядя во вкладку Предупреждение . Это была проблема версии .NET Framework и в ней было указано следующее:

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

0
André Santaló

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

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

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

0
Laxman Marothiya

Target Framework добавляемого вами DLL-файла должен совпадать с Target Framework вашего приложения.

0
Shuangpeng Pang

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

0
Ariel Altamirano

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

0
DanW