Вопрос по wpf, xaml, c# – Имя «XYZ» не существует в пространстве имен «clr-namespace: ABC»

65

Я работал над созданием некоторых расширений разметки и начал получать очень странное поведение VS. Я извлек и определил проблему в отдельном решении. Проблема в том, что VS не может создать объект CLR в XAML.

Вот:

Посмотреть:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication4="clr-namespace:WpfApplication4">
    <Window.Resources>
        <wpfApplication4:Dog x:Key="doggy" />
    </Window.Resources>
    <Grid />
</Window>

Код позади:

using System.Windows;

namespace WpfApplication4
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Собака класс:

namespace WpfApplication4
{
    public class Dog
    {

    }
}

App.Xaml (без кода в App.Xaml.cs):

<Application x:Class="WpfApplication4.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

Исключение я получаю:

Error   1   The name "Dog" does not exist in the namespace "clr-namespace:WpfApplication4". \\hopr1\folders$\vxk\Documents\Visual Studio 2012\Projects\WpfApplication4\MainWindow.xaml  6   9   WpfApplication4

Я могу запустить решение, но конструктор не может с ошибкой "Неверная разметка" Есть идеи?

редактировать

Я использую VS 2012 Update 2 То же решение работает в VS 2012 Update 1

Перестройка проекта / решения избавила меня от ошибки. Zoomzoom
Рад, что это сработало - если вам удастся заставить его работать на сетевом ресурсе, пожалуйста, «поделитесь» своим обходным путем (каламбур предназначен :) GrahamMc
Это будет звучать очень странно - я заметил, что вы запускаете приложение в сетевой папке? \\ hopr1 \ folder $ \ vxk \ Documents Можете ли вы попробовать сделать то же самое на локальном диске, таком как C: \ - я спрашиваю, потому что я видел очень иррациональное поведение в VS при хранении моего решения в сетевом расположении GrahamMc
Это работает, хорошо заметили! Добавьте это как ответ, я отмечу это как правильный ответ! Vitalij
ОК - только что исправил. DLL, на которую ссылаются, была помечена как «ненадежная», поэтому мне пришлось это исправить (wpflocalizeextension.codeplex.com/discussions/399736), затем мне пришлось закрыть решение, удалить файл 'suo', а затем заново открыть проект. belugabob

Ваш Ответ

21   ответ
2

а работать, сняв флажок «Отключить кнопку кода проекта».

109

кто сталкивается с этим сейчас, ДО ТОГО, ЧТО ВЫ ДЕЛАЕТЕ ЛЮБОЕ ... если вы уверены, что ваши классы / пространства имен верны и перестройка не решила вашу проблему:

Попробуйте перезапустить Visual Studio

Это оно!

Это похоже на ошибку в Visual Studio 2012 (также влияет на все другие версии, которые поддерживают разработку XAML)

Обновление: если перезапуск Visual Studio не работает, перезагрузите весь компьютер.

Обновление: как уже упоминалось в комментариях @Dunk, если перезапуск Visual Studio не работает, попробуйте удалить файл .suo

Также относится к VS2013 Update 4. Удаление файла .suo сработало. liang
Боюсь, я понятия не имею. Я видел эту проблему только один раз, и это исправило ее, с тех пор никогда не видел проблемы. Это было во время работы локально между прочим, а не на сетевом ресурсе. Apogee
Перезапустил VS пару раз. Не помогло Удаление файла .suo сработало. Branislav Lazic
Я вышел из Visual Studio, удалил файлы .suo (по предложению другого пользователя) и перезапустил Visual Studio, и это решило эту проблему. Я не уверен, что перезапуск или удаление файлов .suo было решением, но достаточно просто сделать и то, и другое. Dunk
Спасибо за это, вы сэкономили мне пару часов в поисках ответа. Это случилось со мной в VS2013 Update 2 и перезапуск исправил это. Apogee
0

когда я понял, что рассматриваемый класс был помечен какinternal:

internal class MyClass
{
}

После изменения наpublicдизайнер смог правильно скомпилировать XAML.

10
Скачанное решение DLLРазблокируйте файл .dllЩелкните правой кнопкой мыши и выберите свойстваРазблокируйте его на вкладке «Общие» (см. Изображение)Убедитесь, что VS повторно проверяет XAML (возможно, перезапуская его)

Теневой кеш у меня работал на VS2015. Хороший. Tom Makin
VS2013 - мне пришлось разблокировать .xaml SBF
Спасибо, это сработало для меня, когда я также очистил ShadowCache. % LOCALAPPDATA% \ Microsoft \ VisualStudio \ 14,0 \ Конструктор \ ShadowCache StevenGodin
Да, черт возьми! Ты человек! Потратив почти час, пробуя все остальные предложения, вы наконец добились цели. Я на Windows 10, использую VS2015. Контроль был внутри сторонней библиотеки dll. Пришлось закрыть и заново открыть решение, чтобы исправление вступило в силу. Eternal21
@ DeadlyGhost1 Удаление всего, что находится в папке ShadowCache, окончательно сработало и для меня! Попробуйте превратить ваш комментарий в ответ;) Tobi o' Bobi
3

Перейдите в командную строку и введите mklink / D C: \ LOCALFOLDER \ YOURNETWORKPATH

Затем откройте проекты из локальной папки, и все проблемы исчезнут. Теперь все файлы все еще будут в вашей сетевой папке. :)

Это хорошо сработало для меня, когда проект находится в домашней папке моего Mac, и я использую его в виртуальной машине Parallels через общий ресурс PSF. Отличная идея, спасибо! Michael
Это никогда не работало для меня, у меня все еще были проблемы, пока я не переместил все на локальный диск. Duncan Groenewald
2

десь решений не помогло мне, включая удаление файла suo, выгрузку / перезагрузку проекта, перезапуск VS и т. Д.

То, что работало для меня, было, потому что это был новый проект, я еще не построил его. Я удалил элемент Window.DataContext в буфер обмена, собрал проект один раз (shift-ctrl-b), затем повторно добавил элемент, и он сразу же заработал.

0

MOVE вXCOPY вPost Build вproject properties а потомre-build проект. Дизайнер может захотеть dll в выходной папке проекта.Я использую против 2015

Это может иметь смысл .. У вас есть дополнительная информация по этому поводу? Jordan
@Martin, no man :-( Вышеупомянутый подход - один и единственный, который работал для меня из многих подходов, которые я пробовал. Sony
31

но мои файлы хранятся локально. Мой IValueConverter находится в другой сборке, чем вид, использующий его. Хотя VS2013 IntelliSense предложил следующее, он не работал:

xmlns:conv="clr-namespace:MySharedAssembly.Converters"

После того, как я явно добавил сборку в конце, она заработала:

xmlns:conv="clr-namespace:MySharedAssembly.Converters;assembly=MySharedAssembly"
Сделал все, затем сделал это в прошлом. Я бы попробовал это сначала, затем перезапустить vs / delete .suo. тогда, если это не работает, сделайте массивный обходной путь. Спасибо большое @Wouter TheNoob
Добавление; Assembly = у меня тоже сработало Paul Stegler
Это сработало в моем случае, спасибо за совет. Jeswin
Пожалуйста! Рад, что это сработало! Wouter
0

которая указала мне правильное направление.

Поскольку «Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionTypeNode» реализован в той же сборке, вы должны установить атрибут x: Name, а не Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Metaics .Semantics. Атрибут ReflectionPropertyNode.

Итак, я изменил это:

<local:MyView Name="test"/>

К этому:

<local:MyView x:Name="test"/>

И тогда это сработало. Итак, что дает нам что? 42 возможных причины? Нереально...

6

<Application.Resources>
    <!--Value Converters-->
    <local:SomeConverter x:Key="mySomeConverter"/>

Strg-Shift + B
Положите его обратно - и это сработало.

Strg = Ctrl grexter89
Что такоеStrg? akshay2000
0

Для меня сработало изменение псевдонима пространства имен сместный, к чему-либо еще.

xmlns:local="clr-namespace:ExampleNameSpace.Folder" />

<Grid>
    <StackPanel>
        <local:ReferencedUserControl />
    </StackPanel>
</Grid>

в

xmlns:blah="clr-namespace:ExampleNameSpace.Folder" />

<Grid>
    <StackPanel>
        <blah:ReferencedUserControl />
    </StackPanel>
</Grid>

Надеюсь это поможет!

0

что подписанные сборки были включены только с задержкой. Решением было запустить командуsn -Vr * из консоли разработчика (от имени администратора). Это регистрирует сборку для пропуска проверки. А затем перезапустите Visual Studio.

47

o) могут столкнуться с проблемами прав доступа / доступа при работе в сетевой папке.

Скопируйте свое решение на локальный диск (с полным доверием), и все будет в порядке.

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

Например. этот вопрос дает инструкции о том, как это сделать:

Предоставьте FullTrust общедоступному ресурсу UNC для Visual Studio 2012 и .Net 4.0

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

Обратите внимание, что, согласно комментариям белухабобов, эта проблема может возникнуть в других местах, помимо общего сетевого ресурса - в любом месте, которое не имеет полного доверия. Кто-то может пролить свет на то, что именно вызывает проблему, а не только на то, что решение GrahamMc
Запуск Visual Studio в Parallels и хранение вашего решения в файловой системе вашего Mac, по-видимому, также является причиной этого (Parallels использует сетевые ресурсы для доступа к файловой системе OS X). Копирование решения в абсолютный путь на виртуальном диске C решило это для меня. Mick MacCallum
0

РЕШИТЬ !!

проверьте, присутствует ли функция, которую вы хотите вызвать / класс присутствует в пространстве имен

Правильный пример:

Файл .XAML

          <Window x:Class="objectbinding.MainWindow"
           <!--your xmlns:x .......
           namespace1 is the project name-->
           xmlns:m="clr-namespace:namespace1"
            Title="MainWindow" Height="350" Width="525">
    <Grid>
 <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                    x:Key="anyname" MethodName="GetStrings"/>

            </StackPanel.Resources>

       ItemsSource="{Binding Source={StaticResource Runni}}" />
        </StackPanel>
    </Grid>

// StringData - это имя класса в xaml.cs, а GetString - это функция

Файл .XAML.CS

 namespace namespace1
    {

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

        }
// the class StringData is defined in namespace namespace 1
        public class StringData
        {
            ObservableCollection<String> lst = new ObservableCollection<String>();

            public StringData()
            {
                lst.Add("Abhishek");
                lst.Add("Abhijit");
                lst.Add("Kunal");
                lst.Add("Sheo");
            }
            public ObservableCollection<String> GetStrings()
            {
                return lst;
            }
        }
    }

Неправильный пример:

Файл .XAML

  <Window x:Class="objectbinding.MainWindow"
              <!--your xmlns:x .......
           namespace1 is the project name-->
           xmlns:m="clr-namespace:namespace1"
            Title="MainWindow" Height="350" Width="525">
    <Grid>
 <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                    x:Key="anyname" MethodName="GetStrings"/>

            </StackPanel.Resources>

       ItemsSource="{Binding Source={StaticResource Runni}}" />
        </StackPanel>
    </Grid>

.XAML.CS

namespace namespace1
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
//The StringData is defined in the class mainWindow not in namespace namespace1
        public class StringData
        {
            ObservableCollection<String> lst = new ObservableCollection<String>();

            public StringData()
            {
                lst.Add("Abhishek");
                lst.Add("Abhijit");
                lst.Add("Kunal");
                lst.Add("Sheo");
            }
            public ObservableCollection<String> GetStrings()
            {
                return lst;
            }
        }
    }

}
-2

спользован из конфигурации отладки.

В чем проблема? Я написал это, потому что это помогло мне. wishmaster35
0

и я был сосредоточен на этой ошибке, связанной с ObjectDataProvider. Я обнаружил, что эта ошибка не может быть решена, если проект не может быть построен из-за других ошибок. У меня была пара других обработчиков событий, код которых был удален. Мне нужно было также удалить код, который пытался связать обработчики с элементами управления. Затем проект смог создать и увидеть, что класс, на который я пытался ссылаться из ObjectDataProvider, был доступен.

2

У меня была точно такая же проблема, я закрыл окно / форму, которая вызывала ошибку, а затем запустил проект,

Ошибка, похоже, исчезла, как только проект успешно запустился и не вернулся.

Надеюсь, это поможет любому, кто ищет быстрое решение.

0

Объявление его в словаре ресурсов сработало для меня.

<Window.Resources>
    <c:IsNullConverter x:Key="IsNullConverter" />
</Window.Resources>

Проблема заключается в том, что парсер гадит сам, когда видит расширение разметки вродеConverter={c:IsNullConverter}}", но хорошо с:Converter={StaticResource IsNullConverter}, Я думаю, может быть, в этом проблема.

Windows 10, VS 2013

0

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

Для меня работало просто удаление ссылки на пространство имен в папку viewmodels (xlmns: vm = "clr-namespace: Myproj.ViewModel").

Я добавил тип в свой xaml (DataTemplate DataType = "{x: Тип vm: myviewmodel}"). Затем Visual Studio обнаружила, что пространство имен отсутствует, и я нажал на подсказку, чтобы добавить пространство имен.

0

Всякий раз, когда это происходит (и да, я работаю над сетевым ресурсом - я не могу этого избежать), я закрываю VS, переименовываю FOLDER и снова открываю проект. 9 раз из 10 это работает. На время.

Я имел это случиться со мной, ноНЕ на общем сетевом ресурсе просто локальная папка и обнаружил, что единственным решением было закрыть VS (2013) и переименовать папку решения во что-то другое. В качестве альтернативы, я мог бы просто переместить dll, которая не загружалась должным образом, и обновить ссылку. pjs
11

ства имен были правильными, классы и ссылки тоже были правильными. Скомпилируйте и запустите все нормально, только у дизайнера были какие-то проблемы со мной. Единственное, что сработало

для дизайна swtich от x64 до x86для запуска и отладки переключиться обратно на x64

Я использую 3d party portable.library, который у меня был только в версии x64.

Похоже на то, что я сделал. Я переключился с x64 на любой процессор (и выключил Prefer 32-bit). Я восстановил, а затем смог восстановить его в профиль x64 и восстановить без получения этой глупой ошибки! Nick Miller
У меня была точно такая же проблема. Мой проект ссылался на 64-битную DLL, но был установлен на Any CPU. После установки основного проекта на x64 и перекомпиляции проблема была решена. jettatore
Пробовал перезапустить, но не работает. Переключение на 32бит работает. Syaiful Nizam Yahya

Похожие вопросы