Имя "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
Я могу запустить решение, но дизайнер терпит неудачу с ошибкой "Invalid Markup"
Любые идеи?
Edit
Я запускаю VS 2012 Update 2
Это же решение работает в VS 2012 Обновление 1
Ответы
Ответ 1
Ваше решение работает на сетевом ресурсе..Net(и Visual Studio) могут работать при разрешении/доступе при работе в сетевом ресурсе.
Скопируйте решение на локальный диск (с полным доверием), и все будет в порядке.
Можно получить сетевой диск с полным доверием - вы можете найти ответы на это в StackOverflow и других местах, но по моему опыту я постоянно сталкиваюсь с препятствиями, когда я это делаю, поэтому старайтесь избегать этого, если это не будет абсолютно что важно для проблемы.
например. этот вопрос дает инструкции о том, как это сделать:
Дайте FullTrust для UNC-ресурса для Visual Studio 2012 и .Net 4.0
Я только когда-либо пробовал это с VS2010, поэтому (как указано в ссылке) у вас может быть лучшая радость с 2012 года.
Ответ 2
Для тех, кто сталкивается с этим сейчас, ПЕРЕД ТЫ ДЕЛАЙТЕ ЧТО-НИБУДЬ... Если вы уверены, что ваши классы/пространства имен верны, и восстановление не решило вашу проблему:
Попробуйте перезапустить Visual Studio
Что это!
Это, кажется, ошибка с Visual Studio 2012 (также, похоже, влияет на все другие версии, поддерживающие разработку XAML)
Обновление. Если перезагрузка Visual Studio не работает, перезагрузите весь компьютер.
Обновление. Как упоминалось в комментариях @Dunk, если перезапуск Visual Studio не работает, попробуйте удалить файл .suo
Ответ 3
У меня возникла такая же проблема, но мои файлы хранятся локально. Мой IValueConverter находится в другой сборке, чем его просмотр. Хотя VS2013 IntelliSense предложил следующее, он не работал:
xmlns:conv="clr-namespace:MySharedAssembly.Converters"
После того, как я явно добавил сборку в конце, она сработала:
xmlns:conv="clr-namespace:MySharedAssembly.Converters;assembly=MySharedAssembly"
Ответ 4
Я зациклился на этой ошибке часами. Ассембли и пространства имен были правильными, классы и ссылки были правильными. Компилировать и работать нормально, только у дизайнера были какие-то проблемы со мной. Единственное, что сработало
- для целей проектирования swtich от x64 до x86
- для запуска и отладки обратно на x64
Я использую 3d-party portable.library, который у меня был только в версии x64.
Ответ 5
Загруженное решение DLL
- Разблокировать файл .dll
- Щелкните правой кнопкой мыши и выберите свойства
- Разблокируйте его на вкладке "Общие" (см. изображение)
- Убедитесь, что VS переопределяет XAML (возможно, перезапустив его).
![введите описание изображения здесь]()
Ответ 6
Это все еще происходит в VS 2015. Я вынул SomeConverter в App.xaml:
<Application.Resources>
<!--Value Converters-->
<local:SomeConverter x:Key="mySomeConverter"/>
Strg-Shift-B
Верните его обратно - и это сработало.
Ответ 7
Создайте символическую ссылку на общий ресурс сети на локальном диске.
Перейдите в командную строку и введите mklink/D C:\LOCALFOLDER\YOURNETWORKPATH
Затем откройте проекты из своей локальной папки, и все проблемы исчезнут.
Теперь все файлы будут по-прежнему находиться в вашем сетевом ресурсе.:)
Ответ 8
Я начал новый проект и имел эту проблему. Ни одно из перечисленных здесь решений не работало, включая удаление suo файла, выгрузку/перезагрузку проекта, перезапуск VS и т.д.
Что сработало для меня, потому что это был новый проект, я еще его не построил. Я удалил элемент Window.DataContext в буфер обмена, построил проект один раз (shift-ctrl-b), а затем снова добавил элемент, и он немедленно функционировал.
Ответ 9
Перед тем, как попробовать широкое решение, попробуйте следующее:
У меня была такая же проблема, я закрыл окно/форму, которая вызывала ошибку, а затем запускала проект,
Ошибка, казалось, исчезла после успешного выполнения проекта и не вернулась.
Надеюсь, это поможет любому, кто ищет быстрое решение.
Ответ 10
Я получил ту же ошибку в Visual Studio 2015 и сумел заставить конструктор работать, сняв флажок "Отключить кнопку кода проекта".
![Снимок экрана к кнопке конструктора]()
Ответ 11
Это раздражало меня в течение лет 2008, 10, 12, 13.
Всякий раз, когда это происходит (да, я работаю над сетевым ресурсом - я не могу этого избежать), я закрываю VS, переименую FOLDER и снова открываю проект. 9 раз из 10, это работает. Некоторое время.
Ответ 12
Для кого-то еще застрял.
Что сработало для меня, это изменить псевдоним пространства имен от локального, на что-либо еще.
xmlns:local="clr-namespace:ExampleNameSpace.Folder" />
<Grid>
<StackPanel>
<local:ReferencedUserControl />
</StackPanel>
</Grid>
to
xmlns:blah="clr-namespace:ExampleNameSpace.Folder" />
<Grid>
<StackPanel>
<blah:ReferencedUserControl />
</StackPanel>
</Grid>
Надеюсь, это поможет!
Ответ 13
Была та же проблема. Для меня это было, когда я понял, что класс, о котором идет речь, был отмечен как internal
:
internal class MyClass
{
}
После изменения его на public
разработчик смог правильно скомпилировать XAML.
Ответ 14
Что сработало для меня, это изменить MOVE
на XCOPY
в Post Build
в project properties
, а затем re-build
проекта. Дизайнеру может понадобиться dll в выходной папке проекта. Я использую vs 2015
Ответ 15
После перезагрузки 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 возможных причины? Unreal...
Ответ 16
У меня также есть проект на сетевом ресурсе, и эта ошибка неожиданно появилась. Я попробовал все вышеперечисленные предложения, включая копирование проекта на локальный диск, очистку, перестройку и открытие и закрытие VS. Ни одна из них не решила проблему.
Что сработало для меня, просто удалило ссылку пространства имен в папку viewmodels (xlmns: vm = "clr-namespace: Myproj.ViewModel" ).
Я добавил тип в свой xaml (DataTemplate DataType = "{x: Тип vm: myviewmodel}" ). Затем Visual Studio обнаружила, что пространство имен отсутствует, и я нажал на приглашение, чтобы добавить пространство имен.
Ответ 17
Объявление этого словаря ресурса для меня работало.
<Window.Resources>
<c:IsNullConverter x:Key="IsNullConverter" />
</Window.Resources>
Проблема заключается в том, что синтаксический анализатор сам по себе держится, когда видит расширение разметки, например Converter={c:IsNullConverter}}"
, но отлично с: Converter={StaticResource IsNullConverter}
.
Я думаю, может быть, там, где проблема.
Windows 10, VS 2013
Ответ 18
У меня было 3 ошибки в проекте и было сосредоточено на этой ошибке, связанной с ObjectDataProvider. Я узнал, что эта ошибка не может быть решена, если проект не может построить из-за других ошибок. У меня было еще несколько обработчиков событий, код которых был удален. Мне также нужно было удалить код, который пытался связать обработчики с элементами управления. Затем проект смог построить и увидеть, что класс, который я пытался ссылаться из ObjectDataProvider, был доступен.
Ответ 19
Имя "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;
}
}
}
}
Ответ 20
В моем случае эта ошибка была вызвана тем, что была включена подписка сборок с включенным сигналом "задержка". Решение заключалось в том, чтобы запустить команду sn -Vr *
с консоли разработчика (как администратора). Это регистрирует сборку для пропуска пропусков. Затем перезапустите Visual Studio.
Ответ 21
Это может быть связано с конфигурацией Release.
Дизайнер должен использоваться из конфигурации Debug.