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

时间:2013-04-25 13:54:22

标签: c# wpf xaml

我正在努力创建一些标记扩展,并开始获得非常奇怪的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>

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

21 个答案:

答案 0 :(得分:109)

对于现在遇到这种情况的人来说,在你做任何事情之前......如果你确定你的课程/命名空间是正确的,重建并没有解决你的问题:

尝试重新启动Visual Studio

就是这样!

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


更新:如果重新启动Visual Studio不起作用,请重新启动整个PC。

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

答案 1 :(得分:47)

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

将您的解决方案复制到本地驱动器(完全信任),您应该没问题。

可以让网络驱动器完全信任 - 你可以在StackOverflow和其他地方找到答案 - 但根据我的经验,当我这样做时我会遇到障碍,所以尽量避免它,除非绝对是对手头的问题至关重要。

E.g。这个问题提供了有关如何执行此操作的说明:

Give FullTrust to UNC share for Visual Studio 2012 and .Net 4.0

我只是尝试过VS2010,所以(如链接所示)你可能会更喜欢2012年。

答案 2 :(得分:31)

我遇到了同样的问题,但我的文件存储在本地。我的IValueConverter与使用它的视图驻留在不同的程序集中。尽管VS2013 IntelliSense建议如下,但它无法正常工作:

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

在我最后明确添加了程序集后,它起作用了:

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

答案 3 :(得分:11)

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

  1. 用于设计目的,从x64到x86
  2. 用于运行和调试切换回x64
  3. 我正在使用3d party portable.library,我只在x64版本中使用过。

答案 4 :(得分:11)

下载的DLL解决方案

  1. 取消阻止.dll文件
    • 右键单击它并选择属性
    • 在&#34; General&#34;中取消阻止标签(见图)
  2. 确保VS重新验证XAML(可能通过重新启动它)
  3. enter image description here

答案 5 :(得分:6)

它仍然发生在VS 2015中。我在App.xaml中取出了SomeConverter:

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

<强> STRG移-B
把它放回去 - 它起作用了。

答案 6 :(得分:3)

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

转到命令行并输入mklink / D C:\ LOCALFOLDER \ YOURNETWORKPATH

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

答案 7 :(得分:2)

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

对我有用的是,因为这是一个新项目,我还没有建立它。我将Window.DataContext元素移除到剪贴板,构建项目一次(shift-ctrl-b),然后重新添加元素并立即运行。

答案 8 :(得分:2)

我在Visual Studio 2015中遇到了同样的错误,并通过取消选中&#34;禁用项目代码按钮&#34;来设法使设计人员工作。

Screenshot to Designer Button

答案 9 :(得分:2)

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

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

一旦项目成功运行并且没有恢复,错误似乎很清楚。

希望这有助于任何寻求快速解决方案的人。

答案 10 :(得分:0)

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

答案 11 :(得分: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;
            }
        }
    }

}

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

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

问题似乎是解析器在看到Converter={c:IsNullConverter}}"之类的标记扩展时会自行调整,但可以使用:Converter={StaticResource IsNullConverter}。 我想也许问题出在那里。

  

Windows 10,VS 2013

答案 14 :(得分:0)

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

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

我将类型添加到我的xaml(DataTemplate DataType =&#34; {x:Type vm:myviewmodel}&#34;)。 Visual Studio然后检测到命名空间丢失,我点击提示添加命名空间。

答案 15 :(得分:0)

重新启动Visual Studio后,我收到了一个IntelliSense错误,指出了我正确的方向。

  

由于   'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionTypeNode'   在同一个程序集中实现,您必须设置x:Name属性   而不是   Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionPropertyNode   属性。

所以我改变了这个:

In [8]: s = """BOLD:Parshat NoachBOLD:
   ...: BOLD:Parshat Lech LechaBOLD:
   ...: BOLD:Parshat VayeraBOLD
   ...: BOLD:Parshat Sh’miniBOLD:"""

In [9]: re.findall(r'^(BOLD.*)BOLD:?$', s, re.MULTILINE)
Out[9]: 
['BOLD:Parshat Noach',
 'BOLD:Parshat Lech Lecha',
 'BOLD:Parshat Vayera',
 'BOLD:Parshat Sh’mini']

对此:

<local:MyView Name="test"/>

然后它奏效了。那么,这给了我们什么? 42可能的原因?虚幻...

答案 16 :(得分:0)

对我有用的是将 MOVE 更改为 XCOPY 中的 Post Build project properties ,然后 re-build 项目。设计人员可能需要项目输出文件夹中的dll。 我正在使用vs 2015

答案 17 :(得分:0)

有同样的问题。为我修复的是当我意识到有问题的课被标记为internal

internal class MyClass
{
}

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

答案 18 :(得分: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>

希望这有帮助!

答案 19 :(得分:0)

这让我烦恼了2008年,10年,12年,13年。

每当发生这种情况时(是的,我正在处理网络共享 - 我无法避免),我关闭VS,重命名FOLDER并重新打开项目。十分之九,这是有效的。有一段时间。

答案 20 :(得分:-2)

这可能是由于发布配置造成的。 需要在Debug配置中使用Designer。