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

时间:2013-02-24 11:05:06

标签: c# .net wpf xaml namespaces

我有一个小的WPF应用程序,用于编译就好但不再了。我不能说它在哪一点停止建设。它有一天工作得很好,接下来就不行了。

这是项目结构:
enter image description here
除了标准.net dll之外,没有其他项目或外部参考。

以下是发生问题的用户控件:

<UserControl x:Class="TimeRecorder.HistoryUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TimeRecorder.ViewModel"
         xmlns:framework="clr-namespace:TimeRecorder.Framework"
         mc:Ignorable="d" Height="Auto" Width="Auto" Padding="5">
<UserControl.Resources>
    <local:HistoryViewModel x:Key="ViewModel"/>
    <framework:BoolToColorConverter x:Key="ColorConverter"/>
</UserControl.Resources>
<StackPanel DataContext="{StaticResource ViewModel}">

这是我得到的错误: http://i48.tinypic.com/5u1u8w.png

请注意,这不仅仅是截图中的一个文件,而是我在xaml中以类似的方式在此项目的所有用户控件/窗口文件中添加的所有引用。

所以文件在那里,文件中的命名空间是正确的,xaml文件中的命名空间/类名是(据我所知)是正确的。当我输入xaml时,我得到intellisense,因此它可以找到文件,但是在编译时没有。

其他帖子中最常见的解决方案是.net框架版本。目前,我的主要和测试项目都设置为.Net Framework 4。完整版不是客户端配置文件。

以下是我认为搞砸的事情: 在配置管理器中,两个项目都将其Platform设置为Any CPU,但在尝试解决此问题时,我发现主项目设置为x86,测试项目设置为Any CPU。所以我在配置管理器中为主项目手动添加了任何CPU。但老实说,我不知道我是否做得正确,或者即使我应该这样做。所以作为一个额外的问题,有没有办法可以将配置管理器重置为默认状态?对于主要问题,这有什么可说的吗?我不知道主项目是否总是设置为x86,或者我是否以某种方式将其更改为x86然后它就破坏了。如上所述,这个项目编译好了一段时间。

有什么建议吗?我将回答有关代码的更详细问题,或者您在此处提出的任何问题,而不是在这里漫无目的:)

27 个答案:

答案 0 :(得分:104)

每次发生在我身上的时候我都重新启动了visual studio,重新构建了解决方案并且工作得很好..不能说为什么

答案 1 :(得分:29)

除了“命名空间中不存在”消息之外,我还从设计者那里得到一条消息,它无法显示x64和ARM目标的窗口。

我刚刚发现将构建切换到x86模式,执行重建解决方案,然后切换回x64模式,然后再次重建修复[两个]问题。

简单地重建x64解决方案什么也没做。

答案 2 :(得分:11)

这在Visual Studio 2012(Update 3)上对我有用。

  • 重新启动Visual Studio
  • 将当前程序集添加到名称空间声明xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
  • Build - &gt; Build Solution

答案 3 :(得分:9)

我发现有帮助(特别是如果App.xaml中出现此错误)是注释掉那些给你带来麻烦,重建然后取消注释的引用。想想它的作用是允许整个项目实际构建而不是在错误处停止构建。

从我可以收集的内容来看,应用程序正在尝试按特定顺序构建文件,因此当App.xaml或大概任何其他类文件在引用中出错时,导致错误的文件都没有&#39 ;编译正确,因此它没有在该命名空间中找到该文件。

答案 4 :(得分:8)

重建您的解决方案(有时干净然后构建更好)。然后查看你的错误列表,滚动到最底层,它很可能表示一个错误,它不允许你的程序集编译,而且XAML编译器很可能使用程序集的缓存版本,而不是新版本的程序集意味着要建立。

答案 5 :(得分:7)

我有类似的问题。在我的情况下,我必须做以下

  • 从xaml中移除引用标记(在此示例中为<local:HistoryViewModel x:Key="ViewModel"/>
  • 构建类(在此示例文件中包含HistoryViewModel类)
  • 构建完成后,在xaml中添加引用标记
  • 再次构建

上述方法对我有用。

答案 6 :(得分:6)

对我有用的东西: - 将解决方案配置从Debug切换到Release - 将配置从发布切换回调试

答案 7 :(得分:3)

这些解决方案都不适合我。我这样解决了:

  • 从参考文献
  • 中删除库的dll
  • 下载库的源代码(而不仅仅是dll文件)
  • 构建库的项目以获取新的dll文件
  • 将新的dll文件添加到主项目的参考文献

答案 8 :(得分:2)

如果这个问题绕圈子浪费了几个小时。我将一个单独的用户控件dll移动到项目中,因此它在项目中编译而不是引用的dll。这破坏了整个项目,因此我仔细检查了所有命名空间,路径和文件名。试图在x86和AnyCPU之间删除obj文件,在发布和调试之间进行更改。打开保存所有,重新编译仍然没有乐趣。

记得之前遇到类似的问题,VS2013中标记的错误与我必须修改XAML的位置没有直接关系,而是使用

x:Name="myControl"

在所有控件上,而不是

Name="myControl"

修好了。

答案 9 :(得分:2)

我改变了目标框架我的应用程序&#34; .Net Framework 4.5&#34; to&#34; .Net Framework 4.6&#34;它有效!

答案 10 :(得分:2)

当我试图在xaml中调用命名空间时,我遇到了同样的问题。显示该类在命名空间中不可用。我搜索了很多。最后我发现这个问题与VS有关。我正在使用VS 2013。 我试过以下步骤:

  1. 构建 - &gt;配置管理器 - &gt;有源解决方案平台 - &gt;已更改为x64和x86以及任何CPU。
  2. 关闭VS并再次打开。
  3. 更改

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    

答案 11 :(得分:2)

这是一个类似事情的奇怪例子:

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent"
         IsVisibleChanged=onIsVisibleChanged>
...
</UserControl>

将编译(VS2013)。

StripHTML(WebBrowserControl_name);

产生错误&#34;在Gtl.Ui.Gtl&#34;中找不到类型Ui。 (我向你保证处理程序方法存在于代码隐藏中)。解决方法是在类构造函数中添加处理程序,但c&#39; mon Microsoft,wtf正在进行?

答案 12 :(得分:1)

今天使用Visual Studio 2017社区版进入本期。尝试了所有的建议(重置VS 2017,从x64更改为x32再返回等)和其他来源无济于事。 Intellisense知道一切都在那里,但我每次都得到同样的错误。

无论如何,我的修复结果非常简单......当你花了几个小时来解决这个问题时,他们总是没有!

基本上,我做了以下......

  1. 从xaml文件中删除有问题的代码(在我的情况下只有3行)
  2. 构建项目以便您获得成功的构建
  3. 此时布局神奇地出现在设计师窗口,这是一个好兆头!
  4. 重新插入我在第1点中删除的代码,包括xmlns:entry
  5. 此时你不应该得到任何蓝色的曲线......希望
  6. 再次构建项目
  7. 看起来,通过成功构建,它必须重置“&#39;在VS和/或组件中。成功构建后,请再次插入代码。

    希望这可以帮助某人:)

答案 13 :(得分:1)

尝试了该线程上的所有解决方案,但没有一个起作用。原来是由解决方案配置引起的。由于某些本机依赖关系,我的WPF应用程序设置为X64构建,但该项目的解决方案配置仍设置为AnyCPU。 在解决方案配置管理器中为项目创建新的X64配置,XAML设计人员最终可以识别出我的类型和名称空间。

答案 14 :(得分:1)

在上次构建期间未成功构建项目时,通常会发生此错误。

步骤1)首先从XAML或.cs文件中删除所有导致错误的代码,然后构建&amp;按F5启动项目。

步骤2)添加在XAML中逐个添加导致错误的代码。

答案 15 :(得分:1)

我发现运行命令“运行代码分析”会重新生成所有内容,并且几乎总是可以解决问题(右键单击项目>分析>运行代码分析)。通常,这通常还会重新构建资源文件,以便可以找到字符串等。

答案 16 :(得分:1)

只需从构建菜单

运行代码分析

答案 17 :(得分:1)

在将名称空间添加到.xaml文件之前,请确保由于现有代码而没有任何编译错误。

一旦所有编译检查都OK,然后重建解决方案并尝试添加所需的名称空间以使用其类或属性。

答案 18 :(得分:1)

  • 我建议重命名x:Key="ViewModel"也许有一个小故障
  • 如果您输入local:,VS会显示HistoryViewModel吗?
  • 还要检查您的Class是否为public

答案 19 :(得分:0)

我面临着同样的问题。您会收到此错误,但仍然可以成功构建项目。不便之处是您看不到UI设计(或者只是想清理代码并删除烦人的摆动行)。 阅读很多帖子都尝试过几件事,但随后的工作就像一个魅力。

在Visual Studio 2019中对此进行了尝试:

右键单击解决方案->属性->配置属性,然后将项目配置从“调试”更改为“发行”,反之亦然。

之后,重新构建您的解决方案。它可以解决您的问题。

答案 20 :(得分:0)

完全退出并重新启动 Visual Studio确实通常可以解决这些问题,正如一些已经回答过这篇文章的人所说的那样。但是,有时错误不会得到解决,因为它实际上是构建失败或依赖问题。

当我在 Visual Studio 中处理 WPF 项目时,XAML 错误并不总是根本原因,而是问题失败的征兆。有时会出现 .net 框架依赖问题,这些问题不会出现在错误列表窗口中,您必须使用输出窗口来调试实际失败的内容。

我了解到,当真正的罪魁祸首来自完全独立的类或项目时,根本原因(为什么在多个 XAML 文件中出现如此多的错误)实际上可能是不正确的表现。通常会导致构建失败。特别是在具有多个项目的解决方案中,可能存在一个项目无法生成的 DLL 依赖项,从而导致级联失败,显示为 XAML 文档错误。

XAML 的一个缺点是它需要库的构建副本来验证 XAML,因为元素名称与实际类匹配。因此,有时您会收到 XML 错误,因为库没有正确构建。此外,在添加新控件时,如果您尚未构建项目,它将无法找到新类。只是在查看错误时需要注意的事项。

一旦您修复了 XAML 文件之外的底层构建问题,它将允许构建每个依赖项目。在这些情况下,跨多个 XAML 文件抛出的错误与文档结构无关,而是与底层依赖项的失败有关;它可能会破坏受影响的 XAML 文档呈现所需属性和绑定的能力。这最初具有误导性,但如果您了解它,则有助于找到根本问题。

答案 21 :(得分:0)

https://i.stack.imgur.com/2oEWs.png

https://i.stack.imgur.com/dMwNX.png

遇到了同样的问题,我通过将 exe 保存在 net5.0-windows 文件夹中解决了。

不要尝试在构建后事件命令行中删除它。

答案 22 :(得分:0)

您添加的.dll文件的目标框架应与您应用的目标框架相同。

答案 23 :(得分:0)

问题在于,在创建x86目标时,特定项目的输出路径设置为bin \ x86 \ Debug。它看起来像Expression blend根本不喜欢这样。它似乎只对bin \ Debug中的内容感兴趣。

例如,如果您将x86项目的输出路径更改为bin \ debug,那么我确定您发现它可以正常工作。嗯,无论如何对我有用:)

答案 24 :(得分:0)

我使用的是xmlns:local =&#34;使用:MyRootNamespace.ChildNamespace&#34;在.xaml的标题处,我将其转换为xmlns:local =&#34; clr-namespace:MyRootNamespace.ChildNamespace&#34; ......好吧,我只是让intellisense完成这项工作,并且有效。

答案 25 :(得分:0)

他们缓冲对象布局有一个小故障。如果任何内容被重命名或移动,它就会丢失。 通常对我有用的是创建一个全新的类并复制所有旧代码,让它在新类上工作,然后删除原始类。有时在您使用新的类名启动并运行之后,您可以尝试将其重命名为原始名称(但通常不会)

答案 26 :(得分:0)

对我来说,这是一个反复出现的问题。有一次我发现解决方案正在查看警告标签。这是 .NET框架版本问题,它声明如下:

  

警告9无法解析主要参考“myDll”,因为   它是根据“.NETFramework,Version = v4.5.2”框架构建的。   这是比当前目标框架更高的版本   ” .NETFramework,版本= 4.0" 版。