it-swarm.com.ru

Имя "XYZ" не существует в пространстве имен "clr-namespace: ABC"

Я работал над созданием некоторых расширений разметки и начал получать очень странное поведение 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>

Project settings

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

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

65
Vitalij

Ваше решение работает в сетевой папке. Приложения .Net (и Visual Studio) могут столкнуться с проблемами прав доступа/доступа при работе в сетевой папке.

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

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

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

Дайте FullTrust общий ресурс UNC для Visual Studio 2012 и .Net 4.0

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

47
GrahamMc

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

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

Это оно!

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


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

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

109
Jordan

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

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

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

xmlns:conv="clr-namespace:MySharedAssembly.Converters;Assembly=MySharedAssembly"
30
Wouter

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

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

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

11
Stefan Michev

Загруженное DLL решение

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

 enter image description here

10
consideRatio

Это все еще происходит в VS 2015. Я вынул SomeConverter в App.xaml:

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

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

6
Andi Truman

Создайте символическую ссылку на сетевой ресурс на локальном диске.

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

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

3
Tom

Прежде чем попробовать обширное решение, попробуйте следующее:

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

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

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

2
Connor Mcgrann

Я получил ту же ошибку в Visual Studio 2015 и сумел заставить дизайнера работать, сняв флажок «Отключить кнопку кода проекта».

 Screenshot to Designer Button

2
ChristianMurschall

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

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

2
Jim Yarbro

После перезапуска Visual Studio я получил ошибку IntelliSense, которая указала мне правильное направление.

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

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

<local:MyView Name="test"/>

К этому:

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

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

0
l33t

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

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

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

0
Haim Katz

Для кого-то еще застрял. 

Для меня сработало изменение псевдонима пространства имен с local на что-то еще.

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
Ben Winding

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

0
Sony

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

internal class MyClass
{
}

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

0
James Ko

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

0
BlueMonkMN

Это раздражало меня в течение 2008, 10, 12, 13 лет.

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

0
Muckers Mate

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

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

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

Windows 10, VS 2013

0
Cool Blue

Имя «XYZ» не существует в пространстве имен «clr-namespace: ABC»

РЕШИТЬ !!

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

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

Файл .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;
            }
        }
    }

}
0
Runni Kumari

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

0
Scroog1