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


80

我有一个小的WPF应用程序,该应用程序过去可以正常编译,但现在不再编译。我真的不能说停止建造的时间。一天工作得很好,而第二天就不好了。

这是项目结构:

在此处输入图片说明

除标准.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时,我得到了智能感知,因此它可以正常地找到文件,但编译时却找不到。

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

这是我想弄清楚的事情: 在配置管理器中,两个项目的Platform都设置为Any CPU,但是在尝试解决这一问题时,我注意到主项目设置为x86,测试项目设置为Any。中央处理器。因此,我在配置管理器中为主项目手动添加了任何CPU。但是,老实说,我不知道我是否正确地做到了,或者即使我应该这样做。因此,还有一个问题,是否可以将配置管理器重置为其默认状态?对于主要问题,这有什么要说的吗?我不知道主项目是否总是设置为x86,或者我是否以某种方式将其更改为x86,然后它坏了。如前所述,该项目可以编译一段时间。


仅供参考,您可以阅读ProgressTimeSpentUserControl.xaml。您可能想做更好的模糊处理;)
ItNotNotie。

没什么大不了:)这只是一个临时文件,我正在测试一些东西,因为其他东西是该项目的一部分,具有所属的视图模型,所以我的OCD告诉我将其标记为不相关;)
ardal

2
2天前,我遇到了一个非常类似的问题-我搞乱了配置管理器,试图将要构建的所有内容都设置为“任何cpu”而不是x86,并且它停止构建。我发现我做了两件事-首先,我将其留在发布模式下,其次,在某些情况下,该程序集的构建配置管理器未标记为要构建。我的解决方法是使用所有可用的模式(x86,混合平台和任何cpu)并设置要构建的所有程序集。这听起来像是您会因为发现自己在想什么的时候不去想而踢自己的事情之一!
杰伊

类似的问题(有工作答案):stackoverflow.com/questions/28216096/...
Oleksa

对于在2018年.NET 4.6.1登陆的人,我重新启动了VS,然后重新构建,然后它开始工作。肯定比我以为我在某处有O型打字要花费更多的时间。
Mwspencer

Answers:


138

每次发生在我身上的时候,我都重新启动了Visual Studio,重新构建了解决方案,并且效果很好。


15
要添加的一件事-仅当我以管理员权限重新启动VS时,项目才能成功建立。有了常规权限,即使重新启动和重新构建解决方案也无济于事。
Sevenate

1
只需保存导致问题的解决方案。在管理员模式下启动VS,然后从解决方案文件中启动“全部重建”。有效。非常诡异。
pollaris

12
可悲的是,这仍然没有得到解决5年以后。对于VS 2017,存在相同的问题,并且相同的解决方案仍然有效!
CodeHacker

@gil kr我对xamarin及其XML有类似的问题。我发现将项目从网络文件夹移动到本地文件夹解决了该问题。我想知道是否是这种情况。
vdidxho

3
它甚至不能从管理权限开始解决我的问题。
MindRoasterMir

30

除了显示“在命名空间中不存在”消息外,我还从设计人员处收到一条消息,提示它无法显示x64和ARM目标的窗口。

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

简单地重建x64解决方案并没有任何作用。


5
还有一步。您必须重建到x86,然后在设计器中打开xaml。然后才回到x64。
Dzienny 2014年

2
我尝试重新启动Visual Studio,然后重新构建,但仍然遇到相同的错误。@Jerry-您的解决方案是在VS2012中为我工作的解决方案。
巴里2014年

杰里,听起来很可疑,但是您的解决方案有效!我为AnyCPU编译了我的项目,但是以某种方式在x86下编译,然后又解决了这个问题。我怀疑AnyCPU可能会降级到x86,但是由于VS中的错误,除非在x86下进行编译,否则不会构建该部分代码。
罗恩·罗

是的,除“名称空间中不存在”以外,其他所有错误都必须首先解决。
pollaris

VS2017还是发生在我身上。关闭并重新打开VS无效。但是您的解决方案做到了。
Gordon Slysz

12

这是在Visual Studio 2012(更新3)上对我有用的。

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

为我工作VS2015 Professional update3,谢谢:)
EricG

可以验证,它也适用于Visual Studio 2019。
20

11

我发现有帮助的(特别是如果在中发生此错误App.xaml)是注释掉给您带来麻烦的参考,重新构建,然后取消注释。认为这样做是允许整个项目实际构建,而不是在出错时停止构建。

据我所知,该应用程序正在尝试按一定顺序构建文件,因此,当App.xaml引用中可能有其他类文件错误时,或者可能是引用中其他类文件错误时,导致错误的文件尚未正确编译,因此为什么没有在该名称空间中找不到文件。


2
您说的是正确的主意:the app is trying to build the files in a certain order。这使我查看了我的.csproj文件。有App.xaml.cs第一名。然后,我将其移至显示此错误的文件下,进行重建,该错误消失了。谢谢!
斯蒂芬

9

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


7

我有类似的问题。就我而言,我必须执行以下操作

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

上面的方法对我有用。


请参阅我的答案,以了解为什么这可以解决您的问题。
jaysoncopes

6

对我有用的功能:-将解决方案配置从“调试”切换到“发布”-将配置从“发布”切换到“调试”


奇怪。这也对我有用。在每个发行版中也清理过版本。
GeoffCoope

4

立即使用Visual Studio 2017社区版解决此问题。在这里尝试了所有建议(将VS 2017重置,从x64更改为x32,然后再次返回等),以及从其他来源获得的所有建议均无济于事。Intellisense知道所有内容,但是我每次都遇到相同的错误。

无论如何,我的解决方法非常简单...当您花了几个小时解决问题时,它们不是总是如此!

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

  1. 从xaml文件中删除有问题的代码(在我的情况下仅3行)
  2. 建立专案,让您成功建立
  3. 此时,布局神奇地出现在设计器窗口中,这是一个好兆头!
  4. 重新插入我在第1点中删除的代码,包括xmlns:条目
  5. 在这一点上,你不应该有任何蓝色的花体...希望
  6. 再次构建项目

看来,通过成功的构建,它必须在VS和/或程序集中重置“某些内容”。成功构建后,请尝试再次插入代码。


实际上,这是唯一对我有用的东西。这就是为什么我讨厌Visual Studio和XAML。这种使用配置的怪诞类型是不可接受的。
悟空

3

没有一种解决方案对我有用。我以这种方式修复它:

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

3

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

记得以前有类似的问题,VS2013中标记的错误与我必须修改XAML的位置并不直接相关,而是通过使用

x:Name="myControl"

在所有控件上,而不是

Name="myControl"

固定它。


只是再次遇到了同样的问题而忽略了x:请注意,这仅发生在我自己的用户控件上。
Moon Waxing 2015年

你是我的英雄。
霍尔顿

3

我将目标框架“ .Net Framework 4.5”的应用程序更改为“ .Net Framework 4.6”,并且有效!


我将目标从4.6.1更改为4.6,效果也很好。
GisMofx

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">
...
</UserControl>

将进行编译(VS2013)。

<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>

产生错误“在Gtl.Ui.Gtl中找不到Ui类型”(并且我向您保证处理程序方法存在于背后的代码中)。解决方法是在类构造函数中添加处理程序,但是请问微软,wtf还在吗?


我不同意以上评论。这种“上下文扩展”通常对于确定此类错误的原因很有用,而这种错误并非仅由OP的条件引起。
CJBrew

2

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

  1. 构建->配置管理器->活动解决方案平台->更改为x64和x86以及任何CPU。
  2. 关闭VS,然后再次打开。
  3. 更改

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

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

2

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

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

第2步)添加,将导致错误的代码逐一添加到XAML中。


1
  • 我建议重命名, x:Key="ViewModel"也许有一个小故障
  • 如果键入local:,VS是否显示HistoryViewModel
  • 还要检查你Class是否public


1

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


除非,正如我最近发现的那样,这还是行不通的。我不得不关闭VS并重新启动。哦,好吧…
杰夫(Jeff)

1

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


1

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

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


0

这对我来说是一个反复出现的问题。有一次我发现解决方案正在进入“警告”选项卡。这是一个.NET Framework版本问题,它指出以下内容:

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


0

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


0

我在.xaml的标题处使用xmlns:local =“ using:MyRootNamespace.ChildNamespace”,我将其转换为xmlns:local =“ clr-namespace:MyRootNamespace.ChildNamespace” ...好吧,我只是让intellisense做工作,它奏效了。


0

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

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


0

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


0

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.