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

Posted

技术标签:

【中文标题】“clr-namespace” URI 指的是程序集中未包含的命名空间【英文标题】:The 'clr-namespace' URI refers to a namespace that is not included in the assembly 【发布时间】:2011-03-26 10:52:53 【问题描述】:

我试图在我的 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  

我不得不删除代码的核心,因为我正在从事的项目是高度机密的。

【问题讨论】:

【参考方案1】:

重建解决方案,错误就会消失。

【讨论】:

这似乎非常简单......但我已经为此苦苦挣扎了一段时间。谢谢! 我就是有这个问题。重建并不能解决问题。 这行得通的事实有点可怕。但是谢谢,都一样!【参考方案2】:

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

【讨论】:

太棒了! :D 找到这样的东西总是很有趣,但是是的,重建为 32 位 dll 确实为我恢复了设计器。非常感谢。 AAAAGGgghhhhh... 所以,不是 URI 不在程序集中,他们不能说...嘿,这是一个 64 位程序集,我们无法通过 32 位加载用户开发界面......那太容易了。所以,当我想在我的 64 位最终项目中查看任何东西的设计器时,我需要更改为 32 位并且一切都很好,然后切换回 64 以进行最终部署。 我觉得现在这应该是一个已解决的问题,因为 32 位正在走向桌面/服务器的渡渡鸟方式,ARM 尚未真正占据主导地位,而 64 位 Windows 上的 32 位应用程序拥有整个 sysWOW64火车残骸要处理。尽管如此,谢谢你,这也解决了设计师的其他问题。【参考方案3】:

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

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

【讨论】:

这个答案应该得到更多关注 这个应该推广;我在 PatientStorageManager.UI.View 中有一个 xaml 视图,我必须从 xmlns:dataHelper="clr-namespace:PatientManagerMD.ResourceCentral.DataHelper" 更改为 xmlns:dataHelper="clr-namespace:PatientManagerMD.ResourceCentral.DataHelper;assembly=PatientManagerMD.ResourceCentral" 并且它起作用了。【参考方案4】:

我知道出了什么问题。尽管 Visual Studio 将此显示为第一个错误,但我的编码确实存在其他错误,导致转换器无法组装。因此,当 VS 去查找程序集时,它并不存在。

【讨论】:

你有更多关于错误的详细信息吗? 就我而言 - WPF 控件的构造函数因重构而失败。当我使用调试器时,很明显。【参考方案5】:

vs2008 设计器的一些问题

这样做:

    关闭设计器 全部重建 (Alt+B+R) 解决方案

现在不会有任何错误了。

【讨论】:

这有效,当构建目标变回时,应该是 dll 类型的问题,对于 64 位应用程序,以 64 位开始构建,以防如果您先构建 x86 然后更改为 x64,则导致你这个问题。【参考方案6】:

我能够重现您的问题:

我在 .NET Framework 4.0 中创建了一个简单的 WF。重命名了 xaml 文件。作为重命名 xaml 文件的一部分,您必须在调用 WorkflowInvoker 对象上的 Invoke 时手动重命名工作流运行时名称。我建立项目。我收到错误“'clr-namespace' URI 引用了程序集中未包含的命名空间 'System'。”

我是如何解决的:

我打开项目属性页。由于某种原因,目标框架从 .NET 框架 4.0 切换到 4.0 客户端版本。因此,我选择了 .NET 4.0 并重建了项目。错误不再存在。

【讨论】:

刚刚也遇到了这个问题,这解决了它:我的程序集设置为客户端配置文件,但引用的是完整配置文件的程序集... 这也是我的问题。主 WPF 应用程序设置为 .Net 4.0 Client Profile,我的控件库是 .Net 4.0。将 WPF 应用程序切换到 .Net 4.0 解决了这个问题。【参考方案7】:

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

我只是在摆弄构建架构(从 x86 到 x64)后遇到了这个问题,并且主 wpf 项目已被取消选择。

【讨论】:

我发生了同样的事情,无法弄清楚我从源代码管理中删除并读取项目后发生了什么。这个答案有效。【参考方案8】:

我在 C# WPF 项目中遇到了这个问题。 它似乎是在您最后一次尝试关闭项目时生成的,在项目期间出现任何类型的错误,甚至在 XAML 中存在问题的相关命名空间中也是如此。

对此的解决方案是修复所有 .CS 文件(或排除有问题的 XAML/CS 文件)以获得运行版本重新构建并运行。

我花了将近 3 个小时才确定设计器似乎正在运行的 Debug 版本一定有问题。这就是为什么在许多情况下人们通过 Rebuild 项目解决了这个问题,但如果项目中存在代码错误,问题将无法自行解决,因为 Rebuild 无法完成并且不会替换设计器支持的版本。

希望这会有所帮助!

【讨论】:

正如你所说-重建发布版本没有用,但重建调试版本很高兴【参考方案9】:

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

【讨论】:

【参考方案10】:

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

【讨论】:

以上是关于“clr-namespace” URI 指的是程序集中未包含的命名空间的主要内容,如果未能解决你的问题,请参考以下文章

RESTFul API 设计 简明指导与规范

URI和URL的区别

android如何通过path得到uri?

我需要两个xmlns:local =“clr-namespace”?

名称 <...> 不存在于命名空间 clr-namespace <...>

URL编码