该名称不存在于XAML中的命名空间错误中

使用VS2012在VB.NET WPF应用程序上工作。 我有一个简单的MusicPlayer教程应用程序,我正在使用学习WPF。 我将本教程的C#版本逐步转换为VB.NET。

它在应用程序中有两个类都在同一个命名空间下。 我能够引用XAML中的命名空间,但是当我尝试引用XAML中的类对象时,出现错误,我无法编译。

奇怪的是,智能感知既可以通过xmlns:c =标签来引用命名空间,也可以在使用<c:来键入类对象时正常工作<c:但是,该对象带有下划线,并且会生成错误,试图在devise器中生成或工作。

.vb类文件位于名为\ Controls的文件夹中。 主项目根目录空间有意留空。 这个类是这样编码的…

 Namespace MusicPlayer.Controls Public Class UpdatingMediaElement .... code here End Public End Namespace 

xaml看起来像这样

(在<Window >标签中定义的名称空间

 xmlns:c="clr-namespace:MusicPlayer.Controls" 

(在<Grid>定义的对象)

  <c:UpdatingMediaElement Name="MyMediaElement" /> 

(显示错误)命名空间“clr-namespace:MusicPlayer.Controls”中不存在名称“UpdatingMediaElement”。

不知道什么是错的或如何解决它?

当你正在写你的wpf代码和VS告诉“名称ABCDE不存在于命名空间clr-namespace:ABC”。 但是,您可以成功地完成您的项目,只有一个小的不便,因为您无法看到UIdevise(或只是想清理代码)。

尝试做到这些:

  • 在VS中,右键点击你的解决scheme – >属性 – >configuration属性

  • 打开一个新对话框,尝试将项目configuration从“debugging”更改为“发布”,反之亦然。

之后,重新构build您的解决scheme。 它可以解决你的问题。

如果程序集与包含类的名称空间不同,则必须明确指定它。

例如: –

 xmlns:Local="clr-namespace:MusicPlayer.Controls;assembly=MusicPlayer" 

尝试将构build目标平台更改为x86并构build项目。

我注意到通过Subversion,我显然已经将项目构build平台目标更改为x64。 这是我所做的唯一的改变。 在做出这个改变之后,代码开始工作了一段时间,然后才开始显示你遇到的同样的错误。 我将平台目标更改为x86进行testing,突然我的devise师再次工作。 随后,我将其更改回到x64,问题完全消失。 我怀疑devise器在x32中构build了某种caching的代码,并且在更改代码时更改了x64构build平台。

在我的情况下,这是因为其他编译错误 。 当其他错误已经解决了这个看似相关的错误也从列表中删除。 特别是错误列表底部和最近更改的页面上的错误。

所以不要直接关注这个错误 ,首先关注其他错误

我已经看到这个问题通过清除Xamldevise影子caching消失。 我遇到了Visual Studio 2015 Update 1的问题。

在Visual Studio 2015caching位于这里:

 c:\user\<username>\AppData\Local\Microsoft\VisualStudio\14.0\Designer\ShadowCache 

处理:

  1. 右键单击解决scheme资源pipe理器中的解决scheme,然后select“清理解决scheme”
  2. closuresVisual Studio
  3. 删除ShadowCache文件夹
  4. 重新打开Visual Studio项目
  5. 重build解决scheme

并没有更多的命名空间错误。

不知道这是否会帮助其他人

我是新来的WPF,仍然是一个VB.net的新手 – 所以我认为得到这个错误是由我做顶峰愚蠢的……..假设我真的! 我已经设法摆脱它通过将我的项目从共享驱动器移动到我的本地驱动器之一。 错误消失了,项目编译完全没有进一步的问题 – 但。 看起来像VS2015仍然存在共享驱动器上的项目的问题。

我有同样的问题,在我的情况下,标记devise视图要求我重build解决scheme,并没有显示与此消息的表单布局: Design view is unavailable for x64 and ARM target platforms ,或Build the Project to update Design view

它不能通过重build解决scheme来解决(既不是devise视图也不是“命名空间中不存在该名称”错误)

我认为这是因为我玩过解决scheme – >属性>configuration属性中的设置

我终于解决了2个工作的问题:

  1. 检查页面的生成列上的所有checkbox:解决scheme – >属性 – >configuration属性
  2. 将解决schemeconfiguration从Debug更改为Release ,反之亦然。

我认为这是Visual Studio2012 Update 2中的一个错误。

同样的问题困扰Visual Studio 2013,Service Pack 4.我也尝试过与Visual Studios 2015 Preview一样的结果。

这只是Visual Studio团队尚未解决的WPF可视化工具的限制。 作为certificate,在x86模式下构build可视化器和在x64模式下构build会禁用它。

对于Visual Studios 2013 Service Pack 4来说,足够奇怪的是intellisense。

我最近使用VS 2015更新3为我的WPF项目在.NET 4.6.2中有这个问题。 我的项目的副本是在一个networking文件夹 ,我把它移动到本地,并解决了这个问题。

这可能会解决其他types的问题,因为它看起来像VS 2015不喜欢networkingpath。 另一个对他们来说是个大问题的问题是如果我的项目在一个networkingpath中,同步git仓库,也可以通过在本地移动来解决。

也许另一个解决scheme,当项目编译,但XAML错误显示:

  1. 在解决scheme探索中,在包含xaml的项目节点上
  2. 右键单击项目并select“卸载项目”
  3. 右键单击项目并select“重新加载项目”确保您的项目仍被选为“启动项目”。 如果不 :
  4. 右键单击该项目并select“设置为启动项目”

无需重build,或closures视觉工作室。

看起来这个问题可能是通过各种“技巧”来解决的。

就我而言,我一直在构build/重build/清理整个解决scheme,而不仅仅是我在解决scheme中正在进行的项目。 一旦我点击“构build[我的项目]”,错误信息就消失了。

对我来说,解决scheme是解开程序集DLL。 您收到的错误消息并不表示这一点,但XAMLdevise者拒绝加载它所称的“沙盒”组件。 您可以在构build时在输出窗口中看到这一点。 如果从互联网下载DLL,它们将被阻止。 要取消屏蔽您的第三方程序集DLL:

  1. 右键单击Windows资源pipe理器中的DLL文件,然后select属性。
  2. 在“常规”选项卡的底部,点击“取消阻止”button或checkbox。

注意:如果您确定它们是安全的,则只能解锁DLL。

在我的情况下,用户控件被添加到主项目。 我尝试了以上各种解决scheme无济于事。 要么我会得到无效的标记,但解决scheme将编译和工作,或者我会添加xmlns:c =“clr-namespace:MyProject; assembly = MyProject”,然后标记将显示,但我会得到一个编译错误标记在XML名称空间中不存在。

最后,我在解决scheme中添加了一个新的WPF用户控件库项目,并将我的用户控件从主项目移到那个项目中。 添加了引用,并将程序集更改为指向新的库,最后标记工作,项目编译没有错误。

我经历了所有的答案,没有人帮助我。 最后能够自己解决,所以提出答案,因为它可能会帮助别人。

在我的情况下,解决scheme有两个项目,一个包含模型(称为项目和程序集名称是Models ),另一个包含视图和视图模型(按照我们的惯例:项目,程序集名称和默认命名空间是Models.Monitor ) 。 Models.Monitor提到了Models项目。

在Models.Monitor项目中,在其中一个xaml中,我包含了以下命名空间:xmlns:monitor =“clr-namespace:Models.Monitor”

我怀疑MsBuild和Visual Studio然后错过了,因为他们试图在程序集“Models”中find一个“Monitor”types 。 为了解决我尝试了以下内容:

  1. xmlns:monitor =“clr-namespace:Models.Monitor; assembly =” – 如果命名空间与https://msdn.microsoft.com/zh-cn/library/ms747086(v = vs 0.110)的.aspx
  2. 还尝试了显式命名空间声明:xmlns:monitor =“clr-namespace:Models.Monitor; assembly = Models.Monitor”

以上都没有奏效。

最后,我放弃了,作为一个解决scheme,我试图使用另一个命名空间UserControl:'ModelsMonitor' 。 那之后我就能编好了。

VB.NET不会像在C#中那样自动添加基于文件夹结构的名称空间信息。 我想我正在通过与你一样的教程(在24小时内自学WPF),并对VB进行相同的转换。

我发现你必须手动添加命名空间信息到XAML Class和XAML.VB后面的代码才能够使用本书所述的命名空间。 即使如此,VB并不像在VB中那样自动将名字空间分配给大会。

这里有另外一篇文章,展示了如何将它包含在你的项目模板中,以便自动生成名字空间信息 – 在添加新项目时自动添加名字空间

在解决scheme属性页面中,检查包含“UpdatingMediaElement”的程序集平台以及包含“UpdatingMediaElement”子类或实现的任何超类和接口的assmeblies。 看来所有这些程序集的平台都必须是“AnyCPU”。

另一个可能的原因:后生成事件是从生成文件夹中删除项目DLL。

澄清:WPFdevise者可能会报告“名称XXX不存在于名称空间中…”,即使该名称存在于名称空间中,并且项目生成并运行得很好, 如果生成后事件将项目DLL从生成文件夹(bin \ Debug,bin \ Release等)。 我在Visual Studio 2015中有这方面的个人经验。

好的,不幸的是,这些技巧都不适合我。 我终于能够解决这个问题。 看来,Visual Studio不能很好地与networking驱动器搭配使用。 我通过将项目从共享驱动器移动到本地并重新编译来解决此问题。 没有更多的错误。

尝试validation您的程序集引用。 如果项目引用上有一个黄色的感叹号,那么就有一个问题,你会得到各种各样的错误。

如果您知道项目引用是正确的,请检查目标框架。 例如,有一个项目使用4.5框架参考4.5.2框架的项目不是一个好的组合。

添加到堆中。

我是WPF应用程序的程序集名称是一个引用的DLL相同的程序集名称。 因此,请确保您的任何项目中都没有重复的程序集名称。

我有解决scheme存储在networking共享,每次打开它,我会得到有关不可信源的警告。 我把它移到本地驱动器,“命名空间不存在”错误也消失了。

为您的视图模型添加一个空构造函数并重build解决scheme。 我尝试了很多解决scheme,但没有解决这个问题。