名称 <...> 不存在于命名空间 clr-namespace <...>
Posted
技术标签:
【中文标题】名称 <...> 不存在于命名空间 clr-namespace <...>【英文标题】:the name <...> does not exist in the namespace clr-namespace <...> 【发布时间】:2013-02-09 15:52:05 【问题描述】:我有一个小型 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">
这是我得到的错误:
请注意,这不仅仅是屏幕截图中的一个文件,而是我在此项目的所有用户控件/窗口文件中以类似方式在 xaml 中添加的所有引用。
所以文件在那里,文件中的命名空间是正确的,xaml 文件中的命名空间/类名(据我所知)是正确的。当我输入 xaml 时,我得到了智能感知,所以它发现文件正常,但在编译时却没有。
其他帖子中最常见的解决方案是 .net 框架版本。我的主项目和测试项目目前都设置为 .Net Framework 4。完整版不是客户资料。
我认为我搞砸了: 在配置管理器中,两个项目的平台都设置为任意 CPU,但在尝试解决此问题时,我注意到主项目设置为 x86,而测试项目设置为任意 CPU。所以我在配置管理器中为主项目手动添加了Any CPU。但是,老实说,我不知道我是否正确地这样做了,或者即使我应该这样做。所以作为一个额外的问题,有没有办法可以将配置管理器重置为其默认状态?这对主要问题有什么要说的吗?我不知道主项目是否总是设置为 x86,或者我是否以某种方式将其更改为 x86,然后它就坏了。如前所述,这个项目在一段时间内编译得很好。
【问题讨论】:
仅供参考,您可以阅读 ProgressTimeSpentUserControl.xaml。你可能想更好地模糊它;) No biggie :) 这只是一个临时文件,我在其中测试一些东西,而其他文件是具有所属视图模型的项目的一部分,所以我的强迫症告诉我将其标记为不相关;) 两天前我遇到了一个非常相似的问题 - 我搞砸了配置管理器,试图将所有内容设置为“任何 cpu”而不是 x86,但它停止了构建。我发现我做了两件事——首先我把它留在了发布模式,其次是构建配置管理器,在某些情况下,程序集没有被标记为构建。我的解决方法是遍历所有可用的模式(x86、混合平台和任何 cpu)并设置所有要构建的程序集。这听起来像是当你发现问题所在时你会因为没有想到而责备自己的事情之一! 类似问题(有工作答案):***.com/questions/28216096/… 对于 2018 年 .NET 4.6.1 登陆这里的任何人,我重新启动了 VS,然后重新构建,它开始工作。花费的时间肯定比我想象的要多。 【参考方案1】:每次发生在我身上时,我都只是重新启动了 Visual Studio,重新构建了解决方案,它工作得很好.. 说不出为什么
【讨论】:
要添加的一件事 - 只有当我以管理员权限重新启动 VS 时,项目才能成功构建。有了常规权限,即使重新启动和重新构建解决方案也无济于事。 只需保存导致问题的解决方案即可。以管理员模式启动 VS 并从解决方案文件中“重新构建”。有效。非常诡异。 遗憾地看到这个问题在 5 年后仍未解决。 VS 2017 存在同样的问题,同样的解决方案仍然有效! @gil kr 我在使用 xamarin 及其 XML 时遇到了类似的问题。我发现将项目从网络文件夹移动到本地文件夹解决了这个问题。我想知道这里是不是这样。 它并没有解决我的问题,即使从管理员权限开始。【参考方案2】:除了“在命名空间中不存在”消息之外,我还收到了来自设计器的消息,它无法显示 x64 和 ARM 目标的窗口。
我刚刚发现将构建切换到 x86 模式,执行重建解决方案,然后切换回 x64 模式,然后再次重建可以解决 [两个] 问题。
仅仅重建 x64 解决方案没有任何作用。
【讨论】:
还有一步。您必须重建到 x86,然后在设计器中打开 xaml。然后才回到 x64。 我尝试重新启动 Visual Studio,然后重新构建,但仍然出现相同的错误。 @Jerry - 你的解决方案是 VS2012 中对我有用的解决方案。 杰瑞,这听起来很可疑,但您的解决方案有效!我为 AnyCPU 编译了我的项目,但以某种方式在 x86 下编译然后又解决了这个问题。我怀疑 AnyCPU 可能会退回到 x86,但由于 VS 中的一个错误,除非在 x86 下编译,否则这部分代码不会构建。 是的,除了“命名空间中不存在”之外的任何其他错误都必须先解决。 在 VS2017 中仍然发生在我身上。关闭和重新打开 VS 不起作用。但你的解决方案做到了。【参考方案3】:我发现有帮助(特别是如果此错误发生在 App.xaml
)是注释掉给您带来麻烦的引用,重建,然后取消注释。我认为 这样做是允许整个项目实际构建,而不是在出现错误时停止构建。
据我所知,该应用程序正在尝试按特定顺序构建文件,因此当 App.xaml
或引用中可能出现任何其他类文件错误时,导致错误的文件尚未编译正确,因此为什么它在该命名空间中找不到文件。
【讨论】:
您说的很对:the app is trying to build the files in a certain order
。这让我查看了我的.csproj
文件。 App.xaml.cs
排在第一位。然后我将它移到显示此错误的文件下,重建,错误消失了。谢谢!
这个解决方案对我有用,而其他解决方案却没有。谢谢【参考方案4】:
这就是我在 Visual Studio 2012(更新 3)上的工作。
重启 Visual Studio 将当前程序集添加到命名空间声明xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
Build
-> Build Solution
【讨论】:
为我工作 VS2015 Professional update3,谢谢 :) 可以验证,它也适用于 Visual Studio 2019。【参考方案5】:重新构建您的解决方案(有时干净然后构建效果更好)。然后查看您的错误列表,滚动到最底部,它很可能会指示不允许您的程序集编译的错误,并且 XAML 编译器很可能使用的是程序集的缓存版本,而不是您的新版本意思是建造。
【讨论】:
这样,在修复了所有 C# 错误后,构建成功,但 XAML 错误将保留在设计器中。然后你必须重新启动 VS 才能再次清洁。无法相信这种疯狂。经过这么多年,这仍然是一个相关的问题。微软...【参考方案6】:什么对我有用: - 将解决方案配置从调试切换到发布 - 将配置从 Release 切换回 Debug
【讨论】:
奇怪。这也对我有用。在每个版本中也进行了干净的构建。【参考方案7】:我有类似的问题。就我而言,我必须执行以下操作
从 xaml 中删除引用标记(在本例中为<local:HistoryViewModel x:Key="ViewModel"/>
)
构建类(在此示例文件中包含HistoryViewModel
类)
构建后,在 xaml 中添加引用标记
再次构建
上述方法对我有用。
【讨论】:
查看我的answer 以了解为什么这解决了您的问题。【参考方案8】:今天使用 Visual Studio 2017 社区版遇到了这个问题。在这里尝试了所有建议(重置 VS 2017,从 x64 更改为 x32 并再次返回等)以及其他来源均无济于事。 Intellisense 知道一切都在那里,但我每次都遇到同样的错误。
不管怎样,我的解决方法非常简单......当你花了几个小时解决这个问题时,它们不总是这样吗!
基本上,我做了以下...
-
从 xaml 文件中删除有问题的代码(在我的例子中只有 3 行)
构建项目,以便您获得成功的构建
此时布局神奇地出现在设计器窗口中,这是一个好兆头!
重新插入我在第 1 点中删除的代码。包括 xmlns: entry
此时您不应该看到任何蓝色曲线...希望
再次构建项目
似乎通过成功构建,它必须在 VS 和/或程序集中重置“某些东西”。一旦你有一个成功的构建尝试再次插入你的代码。
【讨论】:
这实际上是唯一对我有用的东西。这就是为什么我讨厌带有 XAML 的 VisualStudio。这种 hacky 类型的配置是不可接受的。【参考方案9】:没有一个解决方案对我有用。我是这样解决的:
从参考中删除库的 dll 下载库的源代码(而不仅仅是 dll 文件) 构建库的项目以获取新的 dll 文件 将新的 dll 文件添加到主项目的引用中【讨论】:
【参考方案10】:这个问题浪费了几个小时。我将一个单独的用户控件 dll 移到项目中,因此它是在项目中编译的,而不是引用的 dll。这破坏了整个项目,所以我仔细检查了所有命名空间、路径和文件名。尝试删除 obj 文件,在 x86 和 AnyCPU 之间切换发布和调试。打开全部保存,重新编译还是不爽。
记得之前遇到过类似的问题,VS2013 中标记的错误与我必须修改 XAML 的位置没有直接关系,而是通过使用
x:Name="myControl"
在所有控件上,而不是
Name="myControl"
修复它。
【讨论】:
刚刚遇到同样的问题,再次忽略 x:请注意,这只发生在我自己的用户控件中。【参考方案11】:我将我的“.Net Framework 4.5”应用程序的目标框架更改为“.Net Framework 4.6”并且它有效!
【讨论】:
我将目标从 4.6.1 更改为 4.6,效果也很好。【参考方案12】:这是一个类似的奇怪例子:
<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 是怎么回事?
【讨论】:
我不同意上述cmets。这种“上下文扩展”通常有助于确定此类错误的原因,这不仅是由 OP 的条件引起的。【参考方案13】:当我尝试在 xaml 中调用命名空间时遇到了同样的问题。显示该类在命名空间中不可用。我搜索了很多。最后我发现这个问题与VS有关。我正在使用 VS 2013。 我尝试了以下步骤:
-
Build-->Configuration Manager--> Active Solution Platform --> 更改为 x64 和 x86 以及任何 CPU。
关闭VS再打开。
改变
xmlns:VM="clr-namespace:MyFirstAppViewModel"
到
xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
【讨论】:
【参考方案14】:此错误通常发生在上次构建期间项目未成功构建时。
Step-1) 首先从 XAML 或 .cs 文件中删除所有导致错误的代码,然后按 F5 构建并启动项目。
Step-2) 在 XAML 中一一添加导致错误的代码。
【讨论】:
【参考方案15】: 我建议重命名x:Key="ViewModel"
可能有问题
如果你输入local:
,VS 是否会显示HistoryViewModel
?
还要检查您的Class
是否为public
【讨论】:
【参考方案16】:只需从 Build 菜单运行代码分析
【讨论】:
【参考方案17】:我发现运行“运行代码分析”命令会重新构建所有内容并且几乎总是可以解决问题(右键单击项目 > 分析 > 运行代码分析)。这通常也会重新构建资源文件,以便可以找到字符串等。
【讨论】:
除非我最近发现,即使这样也行不通。我不得不关闭VS并重新启动。哦,好吧……【参考方案18】:尝试了此线程上的所有解决方案,但没有一个有效。原来是由解决方案配置引起的。由于某些本机依赖项需要它,我的 WPF 应用程序设置为为 X64 构建,但该项目的解决方案配置仍设置为 AnyCPU。 在解决方案配置管理器中为项目创建新的 X64 配置后,XAML 设计人员最终能够识别我的类型和命名空间。
【讨论】:
【参考方案19】:在将名称空间添加到您的 .xaml 文件之前,请确保您没有因现有代码而出现任何编译错误。
一旦所有编译检查都正常,然后重新构建您的解决方案并尝试添加所需的命名空间以使用其类或属性。
【讨论】:
【参考方案20】:这对我来说是一个反复出现的问题。有一次,我在 警告标签 中找到了解决方案。这是一个 .NET 框架版本问题,它说明了以下内容:
警告 9 无法解析主引用“myDll”,因为 它是针对“.NETFramework,Version=v4.5.2”框架构建的。 这是比当前目标框架更高的版本 “.NETFramework,Version=v4.0”。
【讨论】:
【参考方案21】:他们对对象布局的缓冲存在故障。如果任何东西被重命名或移动,它就会丢失。 通常对我有用的是创建一个全新的类并复制所有旧代码,让它在新类上工作,然后删除原始类。有时在使用新的类名启动并运行后,您可以尝试将其重命名为原始名称(但通常不会)
【讨论】:
【参考方案22】:我在 .xaml 的标题处使用 xmlns:local="using:MyRootNamespace.ChildNamespace" ,然后我把它变成了 xmlns:local="clr-namespace:MyRootNamespace.ChildNamespace" ...好吧,我只是让智能感知来完成这项工作,它奏效了。
【讨论】:
【参考方案23】:问题在于,当您创建 x86 目标时,特定项目的输出路径设置为 bin\x86\Debug。看起来 Expression blend 根本不喜欢这个。它似乎只对 bin\Debug 中的内容感兴趣。
例如,如果您将 x86 项目的输出路径更改为 bin\debug,那么我相信您会发现它会起作用。好吧,无论如何对我有用:)
【讨论】:
【参考方案24】:您添加的 .dll 文件的 Target Framework 应与您应用的 Target Framework 相同。
【讨论】:
【参考方案25】:我遇到了同样的问题。您收到此错误,但您仍然可以成功构建您的项目,不便之处在于您看不到 UI 设计(或者只是想清理代码并删除烦人的摆动线)。 阅读许多帖子尝试了几件事,但以下工作就像魅力一样。
在 Visual Studio 2019 中尝试过:
右键单击您的解决方案 -> 属性 -> 配置属性,然后将项目配置从调试更改为发布,反之亦然。
之后,重新构建您的解决方案。它可以解决您的问题。
【讨论】:
【参考方案26】:Visual Studio 的完全退出和重新启动确实通常可以解决这些问题,正如已经回答此帖子的一些人所说。但是,有时错误不会得到解决,因为它实际上是构建失败或依赖问题。
当我在 Visual Studio 中处理 WPF 项目时,XAML 错误并不总是根本原因,而是失败的症状。有时会出现 .net 框架依赖问题,这些问题没有出现在错误列表窗口中,您必须使用输出窗口来调试实际失败的内容。
我了解到,当真正的罪魁祸首来自完全独立的类或项目时,根本原因(为什么会在多个 XAML 文件中出现如此多的错误)实际上可能是不正确的表现。通常会导致构建失败。尤其是在具有多个项目的解决方案中,可能会出现一个项目无法生成 DLL 依赖项,从而导致级联故障,显示为 XAML 文档错误。
XAML 的一个缺点是它需要库的构建副本才能验证 XAML,因为元素名称与实际类匹配。因此,有时您会收到 XML 错误,因为库没有正确构建。此外,在添加新控件时,如果您尚未构建项目,它将无法找到新类。只是在查看错误时需要注意的事项。
一旦您修复了 XAML 文件之外的基础构建问题,它将允许构建每个依赖项目。在这些情况下,跨多个 XAML 文件引发的错误与文档结构无关,而是与底层依赖关系的失败有关;它可能会破坏受影响的 XAML 文档呈现所需属性和绑定的能力。这最初会产生误导,但如果您理解它,有助于发现根本问题。
【讨论】:
【参考方案27】:https://i.stack.imgur.com/2oEWs.png
https://i.stack.imgur.com/dMwNX.png
遇到了同样的问题,我通过将 exe 保存在 net5.0-windows 文件夹中解决了。
不要尝试在构建后事件命令行中删除它。
【讨论】:
【参考方案28】:"名称 <...> 不存在于命名空间 clr-namespace <...>" 如果此错误持续存在,无论您做什么,您的解决方案中很可能存在与 XAML 文件相关的其他错误。 对我来说,当我解决解决方案中的其他问题时,错误得到了解决。
【讨论】:
【参考方案29】:对我来说,“从项目中排除”用户控件。然后“包含在项目中”。
【讨论】:
以上是关于名称 <...> 不存在于命名空间 clr-namespace <...>的主要内容,如果未能解决你的问题,请参考以下文章
命名空间“系统”中不存在类型或命名空间名称“事务”(您是不是缺少程序集引用?) - C# ASP.NET
命名空间“System.Web”中不存在类型或命名空间名称“优化”