未定义的CLR命名空间 - 找不到解决方案

13

我已经进行了一段时间的研究,试图找到以下情况发生的原因,但是StackOverflow或Google上的解决方案都无法帮助我。

我有一个自定义的UserControl,正在尝试引用同一项目中的命名空间:

xmlns:my="clr-namespace:ColorPicker"

然而,当我编译时,出现了以下错误:
未定义的CLR命名空间。'clr-namespace' URI引用了一个未包含在程序集中的命名空间'ColorPicker'。
这导致无法构建我的项目或引用xaml中的其他自定义控件,生成此类错误:
找不到类型'my:ColorSelector'。请验证您没有缺少程序集引用,并且所有引用的程序集都已构建。
我尝试了这些帖子中提供的所有解决方案: 将自定义命名空间添加到xaml WPF xmlns: 'clr-namespace' URI引用了一个未包含在程序集中的命名空间 'clr-namespace' URI引用了一个未包含在程序集中的命名空间

未定义的CLR命名空间

另外,为了明确起见,我没有关于该项目中其他文件的任何错误,因此似乎不可能是其他文件未编译的结果。

更新: 我的一个示例项目可以在此处下载,它会为我生成错误:http://www.filefactory.com/file/28fbmhj3f4qj/n/ColorPicker_zip


1
从这个描述很难说。你能分享一个小的样本项目来重现这个错误吗? - Joe Castro
2
你确定ColorPicker的命名空间是'ColorPicker'吗?你尝试过添加;assembly=YourAssembly吗? - Kevin DiTraglia
我没有分享实际项目的问题。你是想要一个文件还是一堆源代码?如果是实际项目,那么在这里发布的最快方法是什么? - flamebaud
@flamebaud 我经常看到用户将整个解决方案上传到一些免费的在线文件共享网站,并在他们的问题中包含链接。 - Rachel
你能否将用户控件从当前项目中提取出来并添加到一个空白的 WPF 项目中?如果可以,能否尝试并告诉我们是否能够在该项目中引用它,这将完全排除任何未在控件中显示的构建错误。 - Andy
2
所以你有一个名为 ColorPicker命名空间(因为这听起来像是一个类名)?在该命名空间中,你有一个名为 ColorSelector 的类?最后,ColorPicker 命名空间没有嵌套在任何其他命名空间下? - Tod
3个回答

6
您的第一个链接问题已经得到了答案。答案是:在您可以在.xaml中引用它之前,必须构建包含命名空间和引用的类/控件的程序集。我注释了您的xaml命名空间声明,然后注释了来自这些命名空间的xaml元素,然后注释了由于这些元素不再被声明而导致的C#代码。换句话说,我一直注释到能够成功构建为止。一旦程序集构建完成,我取消注释了xaml命名空间声明,然后取消注释了元素。这会出现一个错误,需要在这些元素上使用x:Name而不是Name,因此我这样做了。然后取消注释了C#代码并进行了构建。

非常感谢 @xr280xr,这个过程解决了我的问题。虽然这个过程看起来很长而且很烦人,但你知道为什么我需要这样做吗?也就是说,Visual Studio 不应该自己聪明到可以处理这个问题吗? - flamebaud
1
@flamebaud 我不知道VS是如何工作的,但我假设当你在设计器中引用命名空间时,它会加载包含的程序集。如果程序集尚未构建,则您的更改将不会在其中并且将不可用于您的XAML;您将引用尚不存在的内容。现在,如果您尝试构建程序集以解决此问题,则无法构建,因为具有缺少引用的破损XAML已编译到同一程序集中。VS不够聪明,无法知道要排除破损的引用以构建其余的程序集以修复破损的引用。 - xr280xr
1
如果它是这样的话会很好,但这有点误导人,因为Intellisense足够智能,可以在构建之前捕捉到您的更改。只要您记得在将代码更改添加到XAML之前构建它们,通常不会有太大问题。 - xr280xr
那么,唯一的解决方案是将所有这些类放在不同的程序集中吗? - Farinha

1

xmlns:my="clr-namespace:ColorPicker;assembly=ColorPicker"。这对我很有用!它更快,更少烦人。


0

我不得不将我的资源字典移动到外部。 我通过更改以下内容解决了我的问题:

<UserControl.Resources>
    <SHCL:GoodBadConverter x:Key="GoodBadConverter"/>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/StandardHelperClassLibrary;component/WPF/Dictionaries/WindowStylesDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/StandardHelperClassLibrary;component/WPF/Dictionaries/WindowStylesDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

其中 已移动到列出的某个资源字典之一。


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