XML 命名空间中不存在标记

Posted

技术标签:

【中文标题】XML 命名空间中不存在标记【英文标题】:tag does not exist in XML namespace 【发布时间】:2011-10-11 06:57:46 【问题描述】:

这个错误似乎到处都是,但每个地方似乎都有自己的解决方案,但都没有解决我的问题。

我正在制作(以及后来合并)的资源字典出现错误,即 XML 命名空间“clr-namespace:Company.Project.Module.Folder;assembly=Company.Project”中不存在标签“ModelBindings” .模块'

我引用的程序集是自定义的,包含在解决方案中。不仅如此,我们还查看了放入资源字典所在项目的 bin 中的 dll,并在检查后包含我要引用的类。所以我知道 1. dll 位于正确的访问位置并且在引用中。 2. dll中包含我想要的数据。

这里有一些资源字典的代码

命名空间列表

xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;assembly=Company.Project.Module"

创建要引用的资源

<modulemodel:ModelBindings x:Key="ModuleModelBindings"/>

就像其他人的错误一样,intellisense 说它是洁净的。此外,xmlns 列表是使用智能感知的自动完成创建并手动重新输入的。都没有用。

我还尝试将所有内容移至 app.xaml,但它仍然给了我同样的错误。

如果我删除 ResourceDictionary 文件的主体,代码编译得很好,但是所有的绑定都被破坏了。

最后,所有资源定义都在使用它们的 xaml 文件中定义,效果很好。只有在我尝试从不同的项目创建它们之后它才不起作用。我对此进行了更改以修复错误,并且返回旧方法可能会出现问题。

编辑:在显示我正在使用的资源字典方面,这是我能做的最好的事情

<SharedResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;assembly=Company.Project.Module"
                    >
    <modulemodel:ModelBindings x:Key="ModuleModelBindings"/>

</SharedResourceDictionary>

如果我将 SharedResourceDictionary 替换为 ResourceDictionary,则会出现同样的错误。

app.xaml 和上面的 SharedResourceDictionary 相对地位于命名空间 Company.Project.Main 中,它引用了 SharedResourceDictionary 的定义位置以及我在上面代码中放入的不同模块项目

解决方案

看起来这主要是用户错误。但这可能发生在其他人身上。当我从原始文件中复制 xmlns:moduleviewmodel 定义时,我必须自己添加 assembly= 部分。就像我说的那样,我自己都这样做了,也使用了键入 'xmlns:moduleviewmodel=' 后的自动完成功能。就在我们发现错误之前,我们再次尝试了自动完成,因为我们发现 7 个命名空间之一没有生成错误。就在那时,我注意到汇编路径中有一个字母不应该大写。奇怪的是,自动完成实际上是自己插入了这个错误。在我们编译时,我注意到了错误的信。更奇怪的是,在我手动修复了所有路径后,我们再次尝试了自动完成,它拼写正确。

我不知道错误自动完成的原因,但是使用固定字母它编译得很好。

现在我只是想知道是否有人会相信自动完成功能正在改变我!

【问题讨论】:

请发布实际的 XAML。然后,您将选择 XAML 并按 Control-K 将其格式化为代码。 用解决方案更新了问题,但不知道根本原因的哪一部分 你可以回答你自己的问题!这样,您就可以获得赞成票。 @John:您对自己的问题的回答是否获得了代表支持?但是,为了质量,应将答案作为答案发布并标记为已接受。 @Anthony:是的,你得到了代表。这是设计的。 【参考方案1】:

根据this article,您只需执行以下操作:

来自:

xmlns:ZZZ="clr-namespace:YYY;assembly=YYY"

到:

xmlns:ZZZ="clr-namespace:YYY;assembly="

为程序集留空值=

这是适合我的解决方案。

【讨论】:

删除整个 'assembly=' :) 这是无效的标记,所以在你运行之前你甚至看不到它 @EricG 谢谢谢谢谢谢! ARGH WPF 是我使用过的所有挑剔的软件中最挑剔的。【参考方案2】:

这可能不是您问题的解决方案,但我看到您经常询问的错误,该问题通常是由加载程序集的问题引起的。

如果您检查您的程序集,并且它附有一个黄色三角形,那么它可能与您当前的项目设置不兼容,由于 不同版本的 .NET 或其他原因排序。

这通常会以静默方式失败,或者只会导致警告;当您尝试在 XAML 中引用 assemble 时,您将收到与您描述的一样的错误。

【讨论】:

这也是我的问题。【参考方案3】:

看起来这主要是用户错误。但这可能发生在其他人身上。当我从原始文件中复制 xmlns:moduleviewmodel 定义时,我必须自己添加 assembly= 部分。就像我说的那样,我自己都这样做了,也使用了键入 'xmlns:moduleviewmodel=' 后的自动完成功能。就在我们发现错误之前,我们再次尝试了自动完成,因为我们发现 7 个命名空间之一没有生成错误。就在那时,我注意到汇编路径中有一个字母不应该大写。奇怪的是,自动完成实际上是自己插入了这个错误。在我们编译时,我注意到了错误的信。更奇怪的是,在我手动修复了所有路径后,我们再次尝试了自动完成,它拼写正确。

我不知道错误自动完成的原因,但是使用固定字母它编译得很好。

现在我只是想知道是否有人会相信自动完成功能正在改变我!

【讨论】:

该死的“自动完成者”!【参考方案4】:

检查错误列表中的警告,在我的情况下,那里有关于未解决的 .Net 4.5.1 引用的消息,而我的项目目标框架是 4.5

【讨论】:

【参考方案5】:

如果您在与 WPF 表单相同的程序集中有用户控件,请确保在导入命名空间时删除程序集部分

错误的导入:xmlns:usercontrol="clr-namespace:CCFARKS.UserControls;assembly=CCFARKS"

更正:xmlns:usercontrol="clr-namespace:CCFARKS.UserControls"

【讨论】:

【参考方案6】:

我对这个错误有完全不同的原因:

我试图使用程序集 A 中的一个类,所以我

1) 在我的项目中添加了对该程序集的引用,

2) 在我的项目中添加了对程序集 A 使用的程序集 B 的引用,

3) 添加到我的 XAML

 xmlns:assemblyA="clr-namespace:A;assembly=A"

3) 添加到我的代码中

using A;

这不起作用,我收到“标签不存在”错误。

有什么帮助,是添加

using B;

在我的代码中,虽然我不直接使用程序集 B 中的任何内容。

【讨论】:

【参考方案7】:

这是一个老问题,但问题来自 .csproj。 确保在“itemgroup”部分的“compile”元素之前定义了“page”元素。

好:

  <ItemGroup>
...
<Page Include="ScreenComponents\StatusBar.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
</Page>
<Compile Include="ScreenComponents\StatusBar.xaml.cs">
  <DependentUpon>StatusBar.xaml</DependentUpon>
</Compile>
…

不好:

  <ItemGroup>
...
<Compile Include="ScreenComponents\StatusBar.xaml.cs">
  <DependentUpon>StatusBar.xaml</DependentUpon>
</Compile>
<Page Include="ScreenComponents\StatusBar.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
</Page>
…

问候,

【讨论】:

以上是关于XML 命名空间中不存在标记的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF 附加属性 - 错误:“XML 命名空间中不存在该属性”

VS2005中提示命名空间System.Web中不存在类型或命名空间名称‘caching’怎么办呢

命名空间“System.Configuration”中不存在类型或命名空间名称“ConfigurationManager”

命名空间“System.Configuration”中不存在类型或命名空间名称“ConfigurationMannger”,求帮助,谢谢

错误:命名空间中不存在类型或命名空间 UI

命名空间“System.Web.Mvc”中不存在类型或命名空间名称