имя не существует в пространстве имен clr-namespace
У меня есть небольшое приложение WPF, которое использовалось для компиляции просто отлично, но больше нет. Я не могу сказать, в какой момент он перестал строиться. Он просто работал нормально один день, а на следующий это не так.
вот структура проекта:
Нет никаких других проектов или внешних ссылок, кроме стандартных 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}">
и вот ошибка I получить:

обратите внимание, что это не только один файл на скриншоте, но и все ссылки, которые я добавляю аналогичным образом в xaml во всех файлах пользовательского элемента управления/окна в этом проекте.
Итак, файл есть, пространство имен в файле правильно, имя пространства имен / класса в файле xaml (насколько я понимаю) правильно. Я получаю intellisense, когда я набираю xaml, чтобы он находил файлы в порядке, но не тогда, когда он компилируется.
наиболее общим решением для этого в других сообщениях была версия .net framework. В настоящее время он установлен на .Net Framework 4 как для моего основного, так и для тестового проекта. Полная версия не профиль клиента.
вот что я думаю, что я испортил:
В configuration manager оба проекта имеют свою платформу, установленную на любой процессор, но в какой-то момент при попытке решить эту проблему я заметил, что основной проект был установлен на x86, а тестовый проект был установлен на любой процессор. Поэтому я добавил любой процессор вручную для основного проекта в Configuration manager. Однако я честно не знаю, правильно ли я это сделал или даже если я должен это сделать. Итак, как дополнительный вопрос, есть ли способ сбросить configuration manager в состояние по умолчанию? Будет ли это что-нибудь сказать о главной проблеме? Я не знаю, всегда ли основной проект был установлен на x86 или нет, или если я каким-то образом изменил его на x86, а затем он сломался. Как уже упоминалось, этот проект компилировался просто отлично на некоторое время.
любой предложения? Я отвечу на более подробные вопросы о коде или что-то еще, как вы их задаете, а не бессвязно здесь:)
22 ответов:
каждый раз, когда это случалось со мной, я просто перезапускал visual studio, перестраивал решение, и оно работало просто отлично.. не могу сказать, почему
в дополнение к сообщению" не существует в пространстве имен", я также получал сообщение от дизайнера о том, что он не может отображать окно для целей x64 и ARM.
Я только что обнаружил, что переключение сборки в режим x86, выполнение решения для перестройки, а затем переключение обратно в режим x64, а затем повторное восстановление исправляет [обе] проблемы.
просто перестроить решение x64 ничего не сделал.
Это то, что работало для меня на Visual Studio 2012 (обновление 3).
- Перезапустить Visual Studio
- добавить текущую сборку в объявление пространства имен
xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssemblyBuild->Build Solution
что я нашел, что помогло (особенно если эта ошибка возникает в
App.xaml) является закомментируйте ссылку(ы), которая дает вам проблемы, перестроить, а затем раскомментировать. Я думаю то, что это делает, позволяет фактически построить весь проект, а не останавливать сборку при ошибке.из того, что я могу собрать, приложение пытается построить файлы в определенном порядке, так что когда
App.xamlили предположительно любые другие ошибки файла класса в ссылке, файл, который вызывает ошибку не правильно составлен, поэтому он не находит файл в этом пространстве.
перестроить решение (иногда чистый, а затем построить работает лучше). Затем просмотрите свой список ошибок, прокрутите его до самого низа, и он, скорее всего, укажет на ошибку, которая не позволяет вашей сборке компилироваться, а компилятор XAML, скорее всего, использует кэшированную версию сборки, а не новую, которую вы хотите построить.
у меня была аналогичная проблема. В моем случае, я должен был сделать следующее
- удалите ссылочную разметку из xaml (в этом примере
<local:HistoryViewModel x:Key="ViewModel"/>)- построить класс ( в этом примере файла, который содержит
HistoryViewModelкласс )- после того, как его построили, добавить ссылки разметки в XAML
- снова построить
выше метод работал для меня.
Что сработало для меня: - Переключение конфигурации решения от отладки к выпуску - Переключение обратно конфигурации с выпуска на отладку
ни одно из решений работал для меня. Я исправил это так:
- удалите dll библиотеки из ссылок
- загрузите исходный код библиотеки (а не только dll-файл)
- создайте проект библиотеки, чтобы получить новый dll-файл
- добавьте новый dll-файл в ссылки основного проекта
эта проблема ходила по кругу, теряя несколько часов. Я переместил отдельную библиотеку dll пользовательского элемента управления в проект, чтобы она была скомпилирована в проекте, а не в dll. Это сломало весь проект, поэтому я тщательно проверил все пространства имен, пути и имена файлов. Пробовал удалять obj-файлы, переключаясь между выпуском и отладкой, между x86 и AnyCPU. Открыв все сбережения, перекомпилировать все равно не радость.
помните, что у вас была аналогичная проблема раньше, ошибка, отмеченная в VS2013, не была напрямую связана с тем, где я должен был изменить XAML, но с помощью
x:Name="myControl"на всех элементах управления, а не
Name="myControl"исправил.
вот странный пример подобного:
<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.Пользовательский интерфейс.Gtl " (и я уверяю вас, что метод обработчика существует в коде). Обходной путь заключается в добавлении обработчика в конструктор класса, но c'Mon Microsoft, wtf продолжается?
я столкнулся с той же проблемой, когда пытался вызвать пространство имен в xaml. показывал, что класс недоступен в пространстве имен. Я много искал. Наконец-то я нашел этот вопрос был с против. Я использую против 2013. Я попробовал ниже шаги:
- Build-->Configuration Manager--> Active Solution Platform -- > изменен на x64 и x86 и любой процессор.
- закрыл VS и открыл снова.
изменить
xmlns:VM="clr-namespace:MyFirstAppViewModel"до
xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
Я изменил целевую платформу мое приложение ".Net Framework 4.5" на ".Net Framework 4.6", и это сработало!
- Я бы рекомендовал переименовать
x:Key="ViewModel"может быть, есть глюк- и если ты типа
local:показывает ли вам VSHistoryViewModel?- также проверьте, если ваш
Class- этоpublic
столкнулся с этой проблемой сегодня с Visual Studio 2017 Community Edition. Попробовал все предложения здесь (сброс VS 2017, изменен с x64 на x32 и обратно и т. д. и т. д.) и из других источников безрезультатно. Intellisense знает, что все есть, но я получал ту же ошибку каждый раз.
в любом случае, мое решение оказалось очень простым ... они не всегда, когда вы потратили пару часов на эту проблему!
в принципе, я сделал следующее ...
- удалить оскорбительный код из файла xaml (всего 3 строки в моем случае)
- построить проект, так что вы получите успешный построить
- в этот момент макет волшебным образом появился в окне конструктора, что было хорошим знаком!
- повторно вставил код, который я удалил в пункте 1. в том числе xmlns: entry
- в этот момент Вы не должны получить никаких синих закорючек ... надеюсь
- построить проект снова
Это кажется, что, получив успешную сборку, он должен сбросить "что-то" в VS и/или сборке. После успешной сборки попробуйте снова вставить свой код.
надеюсь, это поможет кому-то:)
Это постоянная проблема для меня. Один раз я нашел решение, глядя в предупреждение вкладке. Это была проблема с версией .NET framework и в нем говорилось следующее:
предупреждение 9 первичная ссылка "myDll" не может быть решена, потому что он был построен против ".NETFramework, Version=V4.5.2" framework. Это выше, чем в настоящее время адресная база ".NETFramework версии=В4.0".
есть глюк с их буферизацией макетов объектов. Если что-то переименовывается или перемещается, оно теряется. Что обычно работает для меня, так это создать совершенно новый класс и скопировать весь старый код, заставить его работать над новым классом, а затем удалить исходный класс. Иногда после того, как вы получите его и запустите с новым именем класса, вы можете попробовать переименовать его обратно в исходное имя (но обычно нет)
Я использовал xmlns: local= " using: MyRootNamespace.ChildNamespace "в заголовке.xaml, и я превратил его в xmlns:local="clr-namespace:MyRootNamespace.ChildNamespace"... ну, я просто позволил intellisense сделать работу, и это сработало.
проблема заключается в том, что при создании целевого объекта x86 выходной путь для конкретного проекта устанавливается в bin\x86\Debug. Похоже, что смесь не нравится. Кажется, его интересует только то, что в bin\Debug.
Если вы изменили свой выходной путь(ы) для проекта x86 на bin\debug например, то я уверен, что вы найдете его будет работать. Ну, работает для меня в любом случае:)
целевая структура .dll-файл, который вы добавляете, должен быть таким же, как и целевая структура вашего приложения.
эта ошибка обычно возникает, когда проект не был успешно построен во время последней сборки.
Шаг-1) Сначала удалите все ошибки, вызывающие код из XAML или .cs файл и построить и запустить проект, нажав клавишу F5.
Шаг-2) Добавить добавьте код, вызывающий ошибку в XAML один за другим.
Я обнаружил, что запуск команды "выполнить анализ кода" перестраивает все и почти всегда устраняет проблему (щелкните правой кнопкой мыши проект > анализ > выполнить анализ кода). Это также обычно перестраивает файлы ресурсов также Так, что строки и т. д. может быть найден.
Comments