C# 标记在XML命名空间中不存在

C# 标记在XML命名空间中不存在,c#,silverlight,xaml,resourcedictionary,C#,Silverlight,Xaml,Resourcedictionary,这个错误似乎到处都是,但每个错误似乎都有自己的解决方案,没有一个解决了我的问题 我正在制作(以及以后合并)的资源字典中出现错误,即标记“ModelBindings”不存在于XML命名空间“clr namespace:Company.Project.Module.Folder”中;assembly=公司.项目.模块' 我引用的程序集是自定义的,包含在解决方案中。不仅如此,我们还查看了放入资源字典所在项目bin中的dll,检查后它包含了我要引用的类。所以我知道1。dll位于要访问的正确位置,并且位于

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

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

我引用的程序集是自定义的,包含在解决方案中。不仅如此,我们还查看了放入资源字典所在项目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>

如果我将SharedResourceDictionary替换为ResourceDictionary,则会发生相同的错误

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

解决方案


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

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


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

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

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

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

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

发件人:

xmlns:ZZZ=“clr命名空间:YYY;assembly=YYY”

致:

xmlns:ZZZ=“clr命名空间:YYY;程序集=”

为程序集保留空值=


这是适合我的解决方案。

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

我试图使用程序集a中的类,因此

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

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

3) 添加到我的XAML

 xmlns:assemblyA="clr-namespace:A;assembly=A"
3) 添加到我的代码中

using A;
这不起作用,我得到了这个“标签不存在”错误

有帮助的是添加

using B;

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

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

如果您检查汇编,并且它附带了一个黄色三角形,那么它可能与您当前的项目设置不兼容,原因是.NET的不同版本或类似的东西


这通常会无声地失败,或者只会引起警告;当您尝试在XAML中引用程序集时,您将得到一个如您所述的错误。

检查错误列表中的警告,在我的例子中,其中包含有关未解析的.Net 4.5.1引用的消息,虽然我的项目目标框架是4.5,但如果您在与WPF表单相同的程序集中拥有用户控件,请确保在导入命名空间时除去程序集部分

xmlns:modulemodel="clr-namespace:Company.Project.Module.Folder;assembly=Company.Project.Module"
导入错误:xmlns:usercontrol=“clr命名空间:CCFARKS.UserControls;assembly=CCFARKS”


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

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