在XML命名空间“clr-namespace:YYY”中,标签“XXX”不存在。

16

我实现了一个将Int32转换为String的转换器,以便将属性绑定到textBox上。

我在名为MyApp.Converters的命名空间中实现了这个转换器,它被称为Int32ToStringConverter。

然后,在我的axml中,我添加了对我的转换器的引用,如下所示:

<Window x:Class="MusicaDB.Views.PrincipalView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:i="namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
        **xmlns:converter="clr-namesapce:MyApp.Converters, aseembly=MyApp**">

后来,在 windows.Resources 中我有:

<Window.Resources>
        <**converter:Int32ToStringConverter** x:Key="Int32ToStringConverter" />
</Window.Resources>

我遇到一个错误,即在命名空间MyApp.Converters中找不到Int32ToString转换器,程序集为MyApp。

我将项目保存在本地硬盘上,在项目属性中,目标.NET框架为4.0,而不是4.0客户端框架,并尝试清除解决方案并重新编译,但问题仍然存在。

主要的解决方案通常是这两种,但都无法解决我的问题。

11个回答

28

这个问题的另一个可能解决方案是,你在项目和库中使用的.NET版本不一致。


非常有帮助 - 我的语法是正确的,但我忘记为我引用的新程序集设置框架版本。谢谢。 - Derek Kalweit
你能详细阐述一下吗?提供更多细节。 - Waldo Alvarez
2
非常希望将此标记为答案。由于我的代码是自动生成的,因此它并没有错,而这个答案解决了我的问题。 - Bob Claerhout
我的解决方案最终与此相反。 我之前没有指定汇编代码,但现在我指定了,并且问题已经解决。 谢谢! - BrainSlugs83
这有点像我的问题,只是引发XAML错误的二进制文件依赖于System.Windows.Interactivity的特定版本,而该版本在我的项目中不正确。 - santos
胜利者胜利者鸡晚餐! - Danw25

28

这里需要进行三处修正:

  1. 去掉空格 -> xmlns:converter="clr-namespace:MyApp.Converters,assembly=MyApp"
  2. 拼写无误 -> xmlns:converter="clr-namespace:MyApp.Converters,assembly=MyApp"
  3. 正确使用分隔符 -> xmlns:converter="clr-namespace:MyApp.Converters;assembly=MyApp"

根据文档所述:

请注意,将clr-namespace令牌与其值分隔的字符是冒号(:),而将assembly令牌与其值分隔的字符是等号(=)。这两个标记之间要使用分号。此外,请勿在声明中包含任何空格。


参考链接已失效! - Waldo Alvarez
2
@WaldoAlvarez:这并不是问题,而只是MSDN使用了一个愚蠢的默认设置。如果你看到“此主题不再可用”,请从“其他版本”下拉菜单中选择之前的版本。 - H.B.
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Waldo Alvarez
@WaldoAlvarez:嗯,我没有预料到MSDN会处理版本问题,所以我所有问题中的链接都是通用的,没有版本号。此外,这些文章中的大多数都适用于最新版本,只需要他们进行审核并在数据库中进行相应的条目即可。 - H.B.
我的问题通过添加程序集值得到了解决。感谢您指引我正确的方向。 - Rob Vermeulen
显示剩余2条评论

13

我正在探究这种情况发生的原因,但是如果您的转换器位于主程序集中,则从xmlns:converters标签中删除assembly=应该可以消除该构建错误。


5

2
显然,如果它在同一个程序集中,就不要放置它。如果不是,则需要放置它。 - BrainSlugs83

4
我看到可能有两个原因。第一个是您在第一行星号标记中将“assembly”拼错为“aseembly”。更正拼写可能就足够了。第二种可能是您还没有将MyApp.dll添加到项目引用中,这些引用看起来像这样enter image description here在Visual Studio中。

3
只有在另一个项目中使用``标签,否则仅使用命名空间标签。对于我来说,这解决了问题。

1
这也是我的问题。 - rbwhitaker

3

所有答案都是正确的。如果你尝试了所有方法,但仍然无法弄清楚为什么会出现问题,一切似乎都没问题,请重新启动Visual Studio。

在浪费了将近1个小时后,我发现一切都正常,但是以管理员身份重新启动了VS。


1
我真的花了大约3个小时来弄清楚发生了什么!!你建议重新启动VS解决了问题!! - Anthony Griggs
我也试过了,有效。 - Mrinal Kamboj

2
在我的情况下,我遇到了与xmlns:local="clr-namespace:<mydefaultnamespace>"相同的问题。 我通过改变包含的顺序来解决这个问题。将它放在第一位,所有问题都得到解决。 这是一个奇怪的行为,但这是我在我的情况下找到的解决方法。

1
在我的情况下,包含命名空间的程序集实际上并不存在。
我检查了编译错误的程序集的引用,并查看了相关引用程序集的属性。
我导航到路径并发现该程序集确实丢失了(我意识到这是我自己的问题),导致误导性错误。

1

当你升级到Windows 10周年纪念版或创作者版时,如果你正在使用Microsoft.mshtml.dll,可能会发生这个非常晦涩的错误。

即使这不是你遇到的问题,请确保包含无法找到的组件的库可以完全编译。在错误列表中查找任何线索(不是网格而是输出控制台)。

在我的情况下,我正在使用Microsoft.mshtml.dll作为HTML编辑器的一部分,而它在某种程度上未被注册(在GAC中)。

以下文章通过屏幕截图来解释:

https://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html#comment-form

简而言之,我需要运行Visual Studio命令提示符(以管理员身份运行),然后运行以下命令:
cd C:\Windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a
regasm Microsoft.mshtml.dll

我确实说过有些晦涩。重点是要阅读可能在所有警告中隐藏的错误,因为那里可能有重要的线索。

如果操作系统更新突然破坏了您的项目,这可能会特别令人困惑。


似乎是每个Windows功能更新都会出现这种情况。刚刚又发生在我身上了。 - Simon_Weaver
我认为在2019年,“Visual Studio命令提示符”已经消失了,现在是Developer Powershell for VS2019(请确保以管理员身份运行)。 - Simon_Weaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接