名称“ XYZ”在名称空间“ clr-namespace:ABC”中不存在


70

我正在创建一些标记扩展,并开始获得非常奇怪的VS行为。我已经在单独的解决方案中提取并指出了问题所在。问题是VS无法在XAML中创建CLR对象。

这里是:

视图:

<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更新2在VS 2012更新1中相同的解决方案


5
这听起来非常奇怪-我注意到您正在网络共享上运行该应用程序?\\ hopr1 \ folders $ \ vxk \ Documents是否可以在本地驱动器上尝试完全相同的操作,例如C:\-我问的原因是,将解决方案存储在网络位置时,我在VS中看到了非常不合理的行为
GrahamMc 2013年

可行,发现不错!将此添加为答案,我会将其标记为正确答案!
Vitalij 2013年

很高兴它有效-如果您设法以某种方式使其在网络上共享,请“共享”您的变通方法(双关语:)
GrahamMc 2013年

2
好的-修复它。所引用的DLL被标记为“不可信”,因此我必须解决该问题(wpflocalizeextension.codeplex.com/discussions/399736),然后我必须关闭解决方案,删除“ suo”文件,然后重新打开项目。
belugabob 2013年

1
重建项目/解决方案为我摆脱了错误。
Zoomzoom 2014年

Answers:


47

您的解决方案正在网络共享上运行。在网络共享上运行时,.Net(和Visual Studio)应用程序可能会遇到权限/访问问题。

将您的解决方案复制到本地驱动器(完全信任),就可以了。

可以使网络驱动器完全信任地工作-您可以在StackOverflow和其他地方找到答案,但是以我的经验,这样做时我总是遇到障碍,因此请尽量避免使用它,除非这对眼前的问题。

例如,此问题给出了有关如何执行此操作的说明:

将FullTrust授予Visual Studio 2012和.Net 4.0的UNC共享

我只在VS2010上尝试过,因此(如链接中所示),您可能会对2012年有更好的了解。


2
请注意,根据belugabobs对问题的评论,此问题可能会在网络共享以外的其他地方发生-任何不完全信任的位置。某人也许可以弄清楚到底是什么引起了问题,而不是仅仅解决了什么问题
GrahamMc 2014年

3
在Parallels中运行Visual Studio并将解决方案存储在Mac的文件系统上似乎也可能导致这种情况(Parallels使用网络共享来访问OS X文件系统)。将解决方案复制到虚拟C驱动器上的绝对路径中对我来说解决了。
米克·麦卡勒姆

115

对于现在遇到此问题的任何人,在您进行其他操作之前……如果您确定您的类/命名空间是正确的,并且重建不能解决您的问题,请执行以下操作:

尝试重新启动Visual Studio

而已!

这似乎是Visual Studio 2012的错误(也似乎会影响所有其他支持XAML开发的版本)


更新:如果无法重新启动Visual Studio,请重新启动整个PC。

更新:如@Dunk的注释中所述,如果重新启动Visual Studio不起作用,请尝试删除.suo文件。


4
感谢您的帮助,您节省了我几个小时的答案。这是我在VS2013 Update 2中发生的,然后重新启动修复了它。
Apogee 2014年

1
@GrahamMc我完全不知道。我只看过一次这个问题,并且已经解决了,此后再也没有见过这个问题。当时是在本地运行,而不是在网络共享上。
Apogee 2014年

11
我退出了Visual Studio,删除了.suo文件(根据另一个用户的建议),然后重新启动Visual Studio,此问题得以解决。我不确定重新启动或删除.suo文件是否是解决方案,但是这样做很简单。
扣篮2014年

3
重新启动VS几次。没有帮助。.suo文件的删除有效。
Branislav Lazic

3
也适用于VS2013 Update4。删除.suo文件的工作。

32

我遇到了同样的问题,但是我的文件存储在本地。我的IValueConverter与使用它的视图位于不同的程序集中。即使VS2013 IntelliSense提出了以下建议,但仍无法正常工作:

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

我在末尾显式添加了程序集后,它可以工作:

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

1
做了一切,然后最后做了。我会先尝试一下,然后重新启动vs / delete .suo。然后,如果这不起作用,请进行大规模的解决。感谢一吨@Wouter
TheNoob

11

我在这个错误上停留了几个小时。程序集和命名空间是正确的,类和引用也是正确的。编译并运行正常,只有设计师对我有某种问题。唯一有效的

  1. 出于设计目的,从x64切换到x86
  2. 用于运行和调试切换回x64

我正在使用仅在x64版本中使用的3d派对Portable.library。


类似于我所做的。我从x64切换到Any CPU(并关闭了“首选32位”)。我进行了重建,然后能够将其还原到x64配置文件并进行了重建,而没有收到那个愚蠢的错误!
Nicholas Miller

尝试重新启动,但不起作用。切换到32位有效。
Syaiful Nizam Yahya

我有完全一样的问题。我的项目引用的是64位DLL,但设置为“任何CPU”。将主项目设置为x64并重新编译后,问题得以解决。
jettatore

11

下载的DLL解决方案

  1. 解除阻止.dll文件
    • 右键单击它并选择属性
    • 在“常规”标签中取消屏蔽它(见图)
  2. 确保VS重新验证XAML(也许通过重新启动它)

在此处输入图片说明


4
谢谢,当我还清除了ShadowCache时,这对我有用。%localappdata%\ Microsoft \ VisualStudio \ 14.0 \ Designer \ ShadowCache
StevenGodin

当然好!你是男人!在花了将近一个小时的时间尝试其他所有建议之后,您的建议终于解决了。我在Windows 10上,使用VS2015。该控件位于第3方dll中。必须关闭并重新打开解决方案才能使修复生效。
Eternal21 '17

@ DeadlyGhost1删除ShadowCache文件夹中的所有内容最终也对我有用!考虑将您的评论变成答案;)
Tobi o'Bobi

VS2013-我不得不取消阻止.xaml
SBF

6

在VS 2015中仍然会发生这种情况。我在App.xaml中取出了SomeConverter:

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

Strg-Shift-B
放回-并成功。


4

在尝试广泛的解决方案之前,请尝试以下操作:

我遇到了完全相同的问题,我关闭了导致错误的Window / Form,然后运行了该项目,

一旦项目成功运行并且没有重新启动,错误似乎就消除了。

希望这可以帮助任何寻求快速解决方案的人。


我也刚刚发现了这一点。我打开了一些.xaml文件。就我而言,这导致了23个错误。一旦我关闭了文件并重建了解决方案(并且我完全没有做任何更改),它就可以正常运行了。尽管如此,Visual Studio 2019还是有问题。
罗德

3

在本地驱动器上创建一个指向网络共享的符号链接。

转到命令行并键入mklink / DC:\ LOCALFOLDER \ YOURNETWORKPATH

然后从本地文件夹中打开项目,所有问题都会消失。现在所有文件仍将保留在您的网络共享上。


这对我从未奏效,直到将所有内容移至本地磁盘之前,我仍然遇到问题。
Duncan Groenewald 2014年

该项目对我来说很好,项目位于我的Mac的主文件夹中,并且我正在通过PSF共享在Parallels VM中使用它。好主意,谢谢!
迈克尔

2

我正在开始一个新项目,并遇到了这个问题。这里列出的所有解决方案都不适用于我,包括删除suo文件,卸载/重新加载项目,重新启动VS等。

对我有用的是,因为这是一个新项目,所以我尚未构建它。我将Window.DataContext元素删除到剪贴板,一次构建了项目(shift-ctrl-b),然后重新添加了该元素,它立即起作用。


2

我在Visual Studio 2015中遇到了相同的错误,并通过取消选中“禁用项目代码按钮”来设法使设计器正常工作。

屏幕快照到Designer按钮


0

这让我很烦2008年,10,12,13,

每当这种情况发生时(是的,我正在网络共享上工作-我无法避免),我关闭VS,重命名文件夹并重新打开项目。10次​​中有9次有效。一阵子。


我遇到了这种情况,但不是在网络共享上,而是在本地文件夹上,发现唯一的解决方案是关闭VS(2013),并将解决方案文件夹重命名为其他名称。或者,我本可以重新定位未正确加载的dll并更新引用。
pjs 2015年

0

对于其他被困住的人。

对我有用的是将名称空间别名从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

有同样的问题。对我来说,修复此问题的原因是当我意识到所讨论的课程标记为internal

internal class MyClass
{
}

将其更改为之后public,设计人员便能够正确编译XAML。


0

什么工作对我来说是改变MOVEXCOPYPost Buildproject properties,然后re-build该项目。设计人员可能希望dll位于项目输出文件夹中。我正在使用vs 2015


这可能是有道理的。关于此,您还有其他信息吗?
约旦

@马丁,没有人:-(上述方法是一个和唯一一个为我工作我已经试过许多方法的了。
索尼

0

重新启动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

我也在网络共享上有一个项目,此错误意外出现。我尝试了以上所有建议,包括将项目复制到本地磁盘,清理,重建以及打开和关闭VS。这些都不能解决问题。

对我有用的只是删除对viewmodels文件夹的命名空间引用(xlmns:vm =“ clr-namespace:Myproj.ViewModel”)。

我将类型添加到了我的xaml(DataTemplate DataType =“ {x:Type vm:myviewmodel}”)。然后,Visual Studio检测到缺少名称空间,然后单击提示以添加名称空间。


0

在资源字典中声明它对我有用。

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

问题似乎是解析器在看到标记扩展名(如)时会自动提示自己Converter={c:IsNullConverter}}",但适合使用:Converter={StaticResource IsNullConverter}。我认为也许就是问题所在。

Windows 10和VS 2013


0

我在项目中遇到3个错误,并专注于与ObjectDataProvider有关的错误。我发现,如果由于其他错误导致项目无法构建,则无法解决此错误。我还有其他几个事件处理程序,其代码已删除。我还需要删除试图将处理程序链接到控件的代码。然后,该项目便可以构建并看到我尝试从ObjectDataProvider引用的类可用。


0

名称“ 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是Function

.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

在我的情况下,此错误是由启用“仅延迟符号”的已签名程序集引起的。解决方案是sn -Vr *从开发人员控制台(以管理员身份)运行命令。这将注册程序集以跳过验证。然后重新启动Visual Studio。


-2

这可能是由于发布配置所致。需要从Debug配置中使用Designer。


什么问题?我写它是因为它对我有帮助。
Denis535 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.