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


125

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

它在应用程序中有2个类,它们都在同一个命名空间下。我可以在XAML中引用名称空间,但是当我尝试在XAML中引用类对象时,出现错误,并且无法编译。

奇怪的是,IntelliSense既可以通过xmlns:c =标记引用名称空间,也可以在使用键入类对象时很好地工作, <c: 但是该对象带有下划线,并且在尝试在设计器中构建或工作时会生成错误。

.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”。

不确定出什么问题或如何解决?


13
重新开始视觉效果对我有用。(永远不要低估重新启动的能力)
Falaque '16

1
对于那些为此感到挣扎的人,有一点帮助:确保您的课程是公开的。
Borzh

Answers:


233

在编写wpf代码和VS时,请告诉“名称空间clr-namespace:ABC中不存在名称ABCDE”。但是您可以完全成功地构建项目,只有一点点麻烦,因为您看不到UI设计(或者只是想清理代码)。

尝试执行以下操作:

  • 在VS中,右键单击您的解决方案->属性->配置属性

  • 将打开一个新对话框,尝试将项目配置从“调试”更改为“发行”,反之亦然。

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


4
在Visual Studio 2015 Update 1中仍然会发生这种情况。您的解决方案有效-谢谢!
西蒙·史密斯

4
也许不是,但我发现无论如何,只要在工具栏上的“调试”和“发布”模式之间切换就可以了。
ketura '16

35
于2017年7月在VS 2017版本15.2(26430.15)上得到确认。只需在下拉列表中从“调试”更改为“发行版”,即可编译并删除错误,改回并编译后仍可删除错误。
Tedd Hansen

7
似乎VS17尤其顽固-尝试更改Rel / Dbg,更改x64 / x86,删除ShadowCache,ComponentCache,Bin / Obj文件夹,仍然存在“错误”,而设计器不适用于这个很小的应用程序(其他具有例如50个WPF观看效果就可以了)。突然发生,无法消失。曾多次出现此问题,但第一次在VS17上出现,现在无法修复。仍然是最好的答案,因为它已经工作了很多次了。
bokibeg

7
我喜欢我回到这个答案的方式,而且... 2.5年前,我已经对其进行了投票。
Mathieu Guindon '18

51

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

例如:-

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

1
虽然一开始它似乎已经解决了我的问题,但仍然会引发相同的错误。但是,现在我什至无法构建解决方案。
2014年

6
@bouke清洁解决方案并重建它
Vasanth Sriram

太棒了,谢谢。这确实有所帮助
Keith

这为我做到了。奇怪的是,转换器与xaml文件位于同一程序集中...。但是它们位于不同的命名空间中。
乔纳森·阿尔法罗

谢谢,程序集丢失了。
Bagerfahrer

31

我已经知道通过清除Xaml Design Shadow Cache可以解决此问题。我在Visual Studio 2015 Update 1中遇到问题。

在Visual Studio 2015中,缓存位于以下位置:

%localappdata%\Microsoft\VisualStudio\14.0\Designer\ShadowCache

处理:

  1. 在解决方案资源管理器中右键单击该解决方案,然后选择“清理解决方案”
  2. 关闭Visual Studio
  3. 删除ShadowCache文件夹
  4. 重新打开Visual Studio项目
  5. 重建解决方案

瞧,不再有名称空间错误。


7
可悲的是,对我而言,没有改变任何事情。整整一年后,仍然处理这种烦人的事情。:/
Khale_Kitha '16

3
谢谢!最终为我工作。这是可悲的看到这个技巧仍然需要在VS15
Ocab19

4
您可以使用%localappdata%\ Microsoft \ VisualStudio \ 14.0 \ Designer \立即转到正确的文件夹
Maxence

1
只有当您构建解决方案时才能让设计师工作才是可怕的。想象一下,告诉一位汽车设计师在看到设计之前要制造整辆汽车。
Paul McCarthy

25

就我而言,这是因为其他编译错误。解决了其他错误后,该看似相关的错误也从列表中删除。特别是错误列表底部和您最近更改的页面上的错误。

因此,不要直接注意此错误,而首先要关注其他错误


2
请注意,即使没有其他不相关的编译错误,进行构建/编译也可以为我解决此问题。在完成编译之前,XAML窗口似乎并不总是知道新类。
HK1 2014年

1
这是对我最好的建议,但由于@ HK1有时在编译器错误列表中没有其他条目……列表中没有错误,但还有其他错误。要查看它们,请注释或删除标记有名称空间错误的行,再次进行编译,然后您将看到其他编译器错误。修改它们,还原它们时,标有名称空间错误的行将可以正常运行。
SERWare '17

我已经删除了XAML仍然引用的代码中的方法。一旦删除引用,该错误就会消失。
YarsRevenge13

23

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

我通过Subversion注意到,我显然将项目构建Platform目标更改为x64。这是我所做的唯一更改。进行更改后,代码运行了一段时间,然后才开始显示您遇到的相同错误。我将平台目标更改为x86进行测试,然后突然我的设计师再次工作。随后,我将其更改回x64,问题已完全消失。我怀疑设计人员会在x32中构建某种缓存的代码,并且在更改代码时更改x64构建平台会破坏它。


我再次发生这种情况,可以确认这可以为我解决问题。在x86中构建x64之后,可以切换回x64。
teynon 2015年

经过数小时试图弄清楚逻辑的东西之后,这在VS 2012中也对我有用。谢谢,汤姆!
布赖恩·格林威

切换到x86和回到x64可以解决此问题,在此感谢您启发我尝试一下。我什至关闭了VS,删除了bin和obj,并进行了重建以及其他建议,直到此为止没有任何帮助。
Grault

是的,这在VS2015 Update 2上也对我有用。但是,我有必要重新加载外部dll文件并重新生成它们。
SezMe'5

使用VS2015U2,我仍然在x64中遇到此问题。在任何CPU上都能很好地工作。来回切换对我不起作用。
DaleyKD

7

邓诺,如果这会帮助其他人

我是WPF的新手,并且还是VB.net的新手-因此我假设收到此错误是由我在首脑会议上愚蠢地造成的.....假设我确实是!通过将项目从共享驱动器移至本地驱动器之一,我设法摆脱了这一麻烦。错误消失了,项目完全可以编译,没有其他问题。看起来VS2015在共享驱动器上保存的项目仍然存在问题。


2
对我来说就是这种情况,我将其移至我的vm(我在其上开发)上,并且没有问题。谢谢!
Mario Tacke '16

看来我也是这种情况。将它们移动到本地驱动器上(而不是网络共享,这是由Parallels设置的,以便稍微合并Mac和Windows文件系统),此问题已解决。
ckittel

7

也许是项目编译时出现XAML错误的另一种解决方案:

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

无需重建或关闭Visual Studio。


6

耶稣...五年后在Visual Studio 2017中这仍然是一个问题。由于我是WPF的新手,所以我确定问题是由我自己造成的,但是没有,所有内容都正确编译并运行了。

我尝试重建,清理和重建,在x86 / x64输出之间切换,重新启动Windows,清理ShadowCache文件夹,在XML名称空间声明中添加“; assembly = {我的主程序集名称}”,没有任何效果!做的一件事情:

将我的静态Commands类(在我的情况下,这是关于使设计发现我的WPF Commands)放在其单独的程序集中,然后将程序集名称更改为该程序集的名称。


2

我遇到了同样的问题,在我的情况下,“标记设计视图”要求我重建解决方案,但没有显示此消息的表单布局: Design view is unavailable for x64 and ARM target platformsBuild the Project to update Design view

不能通过重建解决方案来解决它(设计视图和“名称在命名空间中都不存在”错误)

我认为这是因为我玩过解决方案->属性>配置属性上的设置

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

  1. 选中页面的“构建”列上的所有复选框:解决方案->属性->配置属性
  2. 将解决方案配置从“ 调试”更改为“ 发布”,反之亦然。

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


2

相同的问题困扰着Visual Studios 2013 Service Pack4。我也尝试使用Visual Studios 2015 Preview获得相同的结果。

这只是Visual Studios团队尚未解决的WPF可视化工具的局限性。作为证明,在x86模式下构建会启用可视化工具,而在x64模式下构建会禁用可视化工具。

足够奇怪的智能感知可用于Visual Studios 2013 Service Pack 4。


2

我最近在.NET 4.6.2中为WPF项目使用VS 2015 Update 3时遇到了这个问题。我的项目的副本位于网络文件夹中,我将其移至本地,从而解决了该问题。

这可能会解决其他类型的问题,因为VS 2015看起来不喜欢网络路径。对于他们来说,另一个大问题是如果我的项目在网络路径中,则同步git存储库,也可以通过将其移动到本地来解决。


1

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

就我而言,我一直在构建/重建/清理整个解决方案,而不仅仅是在解决方案中从事的项目。单击“生成[我的项目]”后,错误消息消失了。


1

尝试验证您的程序集引用。如果项目引用上带有黄色的感叹号,则那里存在问题,您将遇到各种错误。

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


换句话说,项目的.NET Framework版本不能早于引用的项目的.NET Framework版本。
icernos

1

对我来说,解决方案是解开程序集DLL。您收到的错误消息并未表明这一点,但是XAML设计器拒绝加载它所谓的“沙盒”程序集。生成时,您可以在输出窗口中看到它。如果从Internet下载DLL,则会被阻止。要取消阻止您的第三方程序集DLL,请执行以下操作:

  1. 右键单击Windows资源管理器中的DLL文件,然后选择“属性”。
  2. 在常规标签的底部,单击“取消阻止”按钮或复选框。

注意:只有在您确定它们是安全的情况下,才可以解除阻止DLL。


这对我有用-我已经从Dropbox下载了一个项目,并收到错误消息。我还必须删除ShadowCache
geometrikal

1

就我而言,用户控件已添加到主项目中。我尝试了以上各种解决方案,但没有成功。我要么得到无效的标记,但是解决方案可以编译并运行,或者我要添加xmlns:c =“ clr-namespace:MyProject; assembly = MyProject”,然后标记将显示,但是我会得到一个编译错误,即标记在XML名称空间中不存在。

最后,我在解决方案中添加了一个新的WPF用户控件库项目,并将用户控件从主项目移到了该项目中。添加了引用,并更改了程序集以使其指向新的库,最后标记成功了,并且项目没有错误地被编译。


1

我经历了所有答案,没有一个人帮助我。最终我自己能够解决它,因此提出答案可能会对他人有所帮助。

就我而言,解决方案有两个项目,一个包含模型(例如,项目和程序集名称为Models),另一个包含视图和视图模型(按照我们的惯例:项目,程序集名称和默认名称空间为Models.Monitor)。 。Models.Monitor引用了Models项目。

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

我怀疑MsBuild和Visual Studio在尝试在程序集“模型”中查找“监视器”类型时会出错。为了解决这个问题,我尝试了以下操作:

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

以上两种方法均无效。

最后,我放弃了,并且作为一项变通办法,将我尝试使用的UserControl移到了另一个名称空间:'ModelsMonitor'。之后,我能够编译良好。


1

在我的情况下,我有一个名称空间和类的拼写完全相同,因此,例如,我的一个名称空间是

firstDepth.secondDepth.Fubar

它包含自己的类(例如,firstDepth.secondDepth.Fubar.someclass)

但是我在命名空间中也有一个' Fubar '类

firstDepth.secondDepth

在文本上解析为与上面的Fubar命名空间相同的名称。

不要这样


1

就我而言,问题是由于项目的obj目录下的一些幻像文件引起的。以下内容为我解决了这个问题:

  • 清洁项目
  • 退出VS
  • rm -rf / obj / *
  • 调用VS并重建

1

我对此也有很多麻烦!Intellisense可以帮助我完成名称空间和所有内容,但是编译器会哭。我已经尝试了在此线程和其他线程中找到的所有内容。但是,对我而言,最终的帮助是写出这样的东西:

xmlns:util="clr-namespace:LiveSpielTool.Utils;assembly="

将程序集名称保留为空。不知道为什么。但是这里提到了。我必须添加我正在开发一个程序集,所以Assembly属性可能有意义。但是输入程序集名称无效。太奇怪了。


0

VB.NET不会像在C#中那样根据文件夹结构自动添加命名空间信息。我想我正在和您进行相同的教程(24小时自学WPF),并进行相同的VB转换。

我发现,你必须手动将命名空间信息添加到两者的XAML类和后面能够使用命名空间为书中所描述的XAML.VB代码。即使那样,VB也不会像在VB中一样自动将名称空间分配给程序集。

这里还有另一篇文章,展示了如何将其包含在项目模板中,因此它会自动构建命名空间信息- 添加新项目时自动添加命名空间


0

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


0

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

需要说明的是:即使名称空间中确实存在该名称XXX,并且如果构建后事件从中删除了项目DLL,项目也会正常运行,WPF设计器可能会报告“名称XXX在名称空间中不存在...” 。构建文件夹(bin \ Debug,bin \ Release等)。我在Visual Studio 2015中对此有个人经验。


0

好的,不幸的是,这些技巧都不适合我。我最终能够解决问题。似乎Visual Studio在网络驱动器上不能很好地播放。通过将项目从共享驱动器移至本地并重新编译,我解决了此问题。没有更多的错误。


至少两次以上提供此答案。
pdschuller

0

增加到桩。

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


0

我将解决方案存储在网络共享上,每次打开它时,都会收到有关不可信来源的警告。我将其移至本地驱动器,“命名空间不存在”错误也消失了。


0

另外,尝试右键单击您的project-> properties,然后将Platform target更改为Any CPU并进行重建,然后它将起作用。这对我有用


1
您的建议是一项重大更改,如果OP针对特定环境,则可能甚至没有可能。无论哪种方式,都不太可能成为问题的原因,如果它为您解决了问题,那么我建议您的实际问题是项目配置不匹配,这将以多种不同的方式表现出此处显示的问题。
LordWilmore

0

如果您所引用的程序集实际上没有生成,也可能导致此问题。例如,如果您的xaml在Assembly1中,并且您也在Assembly1中引用了一个类,但是该程序集有错误并且没有构建,则将显示此错误。

我对此感到很愚蠢,但就我而言,我在用户控件的作用下tear不休,结果在相关类中出现了各种错误。当我尝试修复所有问题时,我从有问题的错误开始,但并未意识到xaml依赖于已建立的程序集来找到这些引用(与c#/ vb代码不同,即使在构建之前它也可以解决)。


0

我将程序集添加为项目-首先删除了专门添加到dll引用的ddl-做到了。


0

我一直都遇到这个问题。我的视图在WPF自定义控件库项目(类库的一个变体)中。我可以引用预构建的程序集,但是不能引用同一解决方案的另一个项目中的任何代码。一旦将代码移到与xaml相同的项目中,它就会被识别。


0

以我为例,当wpf程序的体系结构与依赖项不完全相同时,将发生此问题。假设您有一个依赖关系是x64,另一个是AnyCPU。然后,如果选择x64,则AnyCPU dll中的类型将“不存在”,否则,x64 dll中的类型将“不存在”。您就是不能同时宣传他们两个。

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.