Подтвердить что ты не робот

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

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

Здесь структура проекта:
enter image description here
Других проектов или внешних ссылок, кроме стандартных DLL.net, нет.

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

<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, а тестовый проект был установлен в Any CPU. Поэтому я добавил любой процессор вручную для основного проекта в диспетчере конфигурации. Однако, честно говоря, я не знаю, правильно ли я это сделал или даже если я это сделаю. Итак, как дополнительный вопрос, есть ли способ reset менеджера конфигурации к состоянию по умолчанию? Будет ли это иметь что сказать для главной проблемы? Я не знаю, был ли основной проект всегда установлен на x86 или нет или я каким-то образом изменил его на x86, а затем он сломался. Как уже упоминалось, этот проект компилируется на некоторое время.

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Этот метод работал у меня.

Ответ 6

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

Ответ 7

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

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

Ответ 8

Ни один из решений не работал у меня. Я исправил его следующим образом:

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

Ответ 9

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

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

x:Name="myControl"

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

Name="myControl"

зафиксировал его.

Ответ 10

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

<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" (и я заверяю вас, что метод обработчика существует в коде). Обход заключается в том, чтобы добавить обработчик в конструктор класса, но c'mon Microsoft, wtf продолжается?

Ответ 11

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

  • Сборка → Configuration Manager → платформа для активных решений → изменена на x64 и x86 и любой процессор.
  • Закрыл VS и снова открыл.
  • Изменить

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    к

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    

Ответ 12

Я изменил целевую структуру Мое приложение ".Net Framework 4.5" на ".Net Framework 4.6", и оно сработало!

Ответ 13

  • Я бы рекомендовал переименовать x:Key="ViewModel", возможно, есть сбой
  • и если вы наберете local:, то VS покажет вам HistoryViewModel?
  • также проверьте, есть ли Class public

Ответ 14

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

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

Ответ 15

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

Ответ 16

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

Ответ 17

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

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

Ответ 18

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