“clr-namespace” URI指的是程序集中未包含的命名空间。

56

我正在尝试在XAML中包含一些用于转换值的类。但是,在编译时我遇到了以下错误:

未定义CLR命名空间。“clr-namespace” URI引用了一个不在程序集中的命名空间“View.Summary.Converters”。(View\View)

而它出错的XAML是:

xmlns:c="clr-namespace:View.Summary.Converters"

此外,这是我的转换类/命名空间的概述:

namespace View.Summary.Converters
{
    class CollapsedIfNegative : IValueConverter { }

    class VisibleIfNegative : IValueConverter { }

    class ErrorCodeToString : IValueConverter { }
}

由于我正在处理高度机密的项目,因此我不得不删除代码的核心部分。

10个回答

59
重新构建解决方案,错误将消失。

2
这似乎非常简单...但我已经为此苦思冥想了一段时间。谢谢! - tordal
13
我有完全相同的问题。重新构建并不能解决它。 - Ian Gilham
这个能够工作的事实有点可怕。但还是谢谢你! - Michael Bromley

41

我刚刚通过将目标从x64更改为x86来解决了这个问题。 显然,Visual Studio是32位进程,无法加载64位程序集。如果您的程序集针对x64平台并且您添加了一些自定义控件,则Visual Studio无法加载它,并抛出此消息。


1
太棒了! :D 发现这样的事情总是很有趣,但是将其重建为32位dll确实恢复了我的设计师。非常感谢。 - Sam
1
AAAAGGgghhhhh... 所以,他们不能说 URI 不在程序集中,而是要说... 嘿,这是一个 64 位的程序集,我们无法通过我们的 32 位用户开发接口进行加载...... 这太容易了吧。所以,当我想查看我的 64 位最终项目中任何东西的设计师时,我需要切换到 32 位,然后一切都好了,最后再切换回 64 位以进行最终部署。 - DRapp
我感觉这个问题应该早已经得到解决了,因为在桌面/服务器领域,32位正在被淘汰,而ARM还没有真正占据主导地位,64位Windows上的32位应用程序也必须应对整个sysWOW64混乱局面。不过还是非常感谢,这也解决了设计师的其他问题。 - sean_m

34

如果您引用外部项目,必须将程序集指定为在您的项目引用中出现的形式:

xmlns:mdls="clr-namespace:MyProject.Models;assembly=MyProject.Models"

3
这个回答应该得到更多关注。 - marsh-wiggle
1
这个应该被推广; 我有一个 XAML 视图在 PatientStorageManager.UI.View 中,我不得不从 xmlns:dataHelper="clr-namespace:PatientManagerMD.ResourceCentral.DataHelper" 更改为 xmlns:dataHelper="clr-namespace:PatientManagerMD.ResourceCentral.DataHelper;assembly=PatientManagerMD.ResourceCentral",然后它就可以工作了。 - Marcelo Scofano Diniz

19

我找出了问题所在。尽管Visual Studio将其显示为第一个错误,但实际上我的编码存在其他错误,这些错误阻止了转换器的组装。因此,当VS去查找程序集时,它并不存在。


您能详细说明一下错误是什么吗? - Yecats
在我的情况下 - 重构时WPF控件的构造函数出现了故障。当我使用调试器逐步执行时,这是显而易见的。 - Sean Doyle

13

使用 VS2008 设计器时出现了问题

按照以下步骤操作:

  1. 关闭设计器
  2. 重新构建整个解决方案(Alt+B+R)

现在就不会有任何错误了。


1
这个可以工作,当构建目标改回来时,应该是与dll类型有关的问题,对于64位应用程序,请使用64位开始构建,如果您先构建x86,然后再切换到x64,会导致出现此问题。 - Jay

8
我能够重现你的问题:
我在 .NET Framework 4.0 中创建了一个简单的 WF。重命名了 xaml 文件。重命名 xaml 文件的一部分是手动重命名 WorkflowInvoker 对象调用时的工作流运行时名称。构建项目时,我遇到了错误:“'clr-namespace' URI 引用不包含在程序集中的命名空间 'System'。”
我的解决方法:
我打开了项目属性页面。由于某种原因,目标框架从 .NET Framework 4.0 切换到了 4.0 客户端版本。所以,我选择了 .NET 4.0 并重新构建了项目。错误不再存在。

我也遇到了这个问题,解决方法是:我的程序集设置为客户端配置文件,但引用的程序集是完整配置文件。 - Josh
这也是我的问题。主WPF应用程序设置为.Net 4.0客户端配置文件,我的控件库是.Net 4.0。将WPF应用程序切换到.Net 4.0解决了这个问题。 - James Hay

3

请检查您的构建配置是否在当前(活动)构建配置中选择了项目进行构建。

我刚刚在调整构建架构(从x86到x64)后遇到了这个问题,主要的wpf项目被取消选择了。


我也遇到了同样的问题,在将项目从源代码控制中移除并重新添加后,无法弄清楚发生了什么。这个答案有效。 - gavin

2
我在一个C# WPF项目中遇到了这个问题。当你在项目中关闭并且在XAML中没有相关命名空间的错误时,似乎会生成此问题。
解决方法是修复所有.CS文件(或排除有问题的XAML/CS文件),以获得运行版本并重新构建和运行。
我花了近3个小时才发现设计师似乎正在运行有故障的调试版本。因此,在许多情况下,人们通过重建项目来解决此问题,但如果您的项目存在代码错误,则该问题将无法自行解决,因为重建无法完成并且无法替换设计师支持的版本。
希望这可以帮助您!

正如你所说 - 重建发布版本没有起作用,但是重建调试版本使其正常。 - arolson101

1

Visual Studio一直会恢复到奇怪的程序集文件路径。只需删除它所引用的实际参考文件,然后将其添加到项目中即可。


0

我遇到了同样的错误。但显然,这只是因为我尝试构建的解决方案的路径问题。 我的路径/目录/文件夹名称包含一些空格。


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