XML名称空间中不存在标记

时间:2011-07-22 18:29:21

标签: c# silverlight xaml resourcedictionary

这个错误似乎遍布整个地方,但每个人似乎都有自己的解决方案,但都没有解决我的问题。

我收到资源字典的错误,我正在制作(后来合并)XML命名空间'clr-namespace:Company.Project.Module.Folder; assembly = Company.Project中不存在标签'ModelBindings' .Module'

我引用的程序集是自定义的并包含在解决方案中。不仅如此,我们已经查看了放入资源字典所在项目的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列表是使用intellisense的自动完成功能创建的,并手动重新输入。两者都没有。

我也尝试将所有内容移至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>

如果我用ResourceDictionary替换SharedResourceDictionary,则会发生同样的错误。

上面的app.xaml和SharedResourceDictionary在命名空间Company.Project.Main中是比较性的,并且它既引用了SharedResourceDictionary的定义,也引用了我在上面代码中放入的不同模块项目

解决方案

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

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

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

7 个答案:

答案 0 :(得分:27)

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

FROM:

的xmlns:ZZZ = “CLR-名称空间:YYY;装配= YYY”

TO:

的xmlns:ZZZ = “CLR-名称空间:YYY;装配=”

为assembly =

留空值

这是适合我的解决方案。

答案 1 :(得分:14)

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

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

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

答案 2 :(得分:13)

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

如果你检查你的汇编,并且它附有黄色三角形,那么它可能与你当前的项目设置不兼容,因为不同版本的.NET ,或者某些东西排序

这通常会无声地失败,或者只会引起警告;当您尝试在XAML中引用汇编时,您将收到类似于您描述的错误。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

我有一个完全不同的原因导致此错误:

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

1)将对此程序集的引用添加到我的项目中,

2)将程序集B使用的程序集B的引用添加到我的项目

3)添加到我的XAML

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

3)添加到我的代码

using A;

这没用,我得到了这个“标签不存在”的错误。

有什么帮助,正在添加

using B;

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

答案 5 :(得分:1)

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

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

Corret:xmlns:usercontrol =“ clr-namespace:CCFARKS.UserControls”

答案 6 :(得分:0)

这是一个老问题,但是,问题来自.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>
…

致谢