WPF:名称空间中不存在该名称

时间:2015-01-29 13:35:24

标签: c# .net wpf xaml

我正在使用VS2013构建一个C#/ WPF应用程序,我有以下类定义(在正在运行的应用程序的同一个程序集中):

namespace MyNamespace
{
    public class MyKey
    {
        public MyKey() { }
        public string name = "";
    }
}

在MainWindow.xaml中,我有:

<Window x:Class="MyNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyNamespace"
        Title="MainWindow" Height="350" Width="525" WindowState="Maximized" WindowStyle="None">
    <Window.Resources>
        <local:MyKey x:Key="key" />
    </Window.Resources>
...

VS不断报告

  

名称&#34; MyKey&#34;在命名空间中不存在   &#34; CLR-名称空间:myNameSpace对象&#34;

有什么想法吗?

P.S。我尝试了以下解决方案(来自stackoverflow中已经发布的问题),但没有一个有效:

  1. 将类移动到其他名称空间,然后在xaml reference
  2. 中使用新名称空间
  3. 重新启动VS并清理/重建解决方案
  4. 清理解决方案,然后重命名其文件夹,然后再次构建解决方案
  5. 将引用更改为:
  6.   

    的xmlns:本地=&#34; CLR-名称空间:myNameSpace对象;装配=&#34;

    编辑:附加信息:目标架构:X64,目标框架:.Net 4.5

8 个答案:

答案 0 :(得分:50)

这个已知的VS错误的一个常见解决方案是您尚未指定尝试更改构建目标平台。

  1. 如果您当前的构建目标平台是x64,请更改为x86。如果它当前为x86,请更改为x64。

  2. 为新目标平台清理和构建解决方案。

  3. 更改回所需的目标平台并重新构建。

答案 1 :(得分:2)

我在VS2012 express版中遇到了同样的问题。使用命令

解决了这个问题 vs2012命令提示符中的“WDExpress / ResetSettings”。

https://stackoverflow.com/a/33706647/4855197

答案 2 :(得分:1)

一种可能的解决方案是从调试发布文件夹中删除所有 .dll 文件。

因为有时当您引用项目时它指的是预构建的dll,即使您在调试模式下运行项目。

调试发布文件夹中删除所有文件并再次构建该项目,现在将此项目的引用添加到您想要的位置。我的工作非常好。

答案 3 :(得分:0)

我有类似的问题。为我修复的是更改项目的构建属性,该属性已添加为参考。原来,“平台目标”在过去已经改变。将其设置为“任何CPU”并重建它解决了错误。

答案 4 :(得分:0)

运行VS Enterprise 2017版本15.6.2 定位.Net 4.6.1

我在UserControl xaml页面遇到同样的问题,在其资源中它试图引用ValueConverter。命名空间是正确的,intellisense甚至会为你删除它,但设计者不会加载页面,代码也不会编译。我甚至尝试将其中一个值转换器从文件和命名空间中移出,并将其移至代码隐藏。 VS变得非常吓人,声称代码隐藏构造函数中的InitializeComponent()方法不存在。

我认为最终为我解决的是当我意识到ValueConverter类缺少这样的主要属性时:

  

[ValueConversion(typeof(string),typeof(decimal))]

一旦我添加了这一行,我就做了一个快速的解决方案清理和编译,然后编译和工作。然后突然xaml可以看到该文件中的所有验证规则和值转换器。现在我已经意识到该文件中的其他3个值转换器也没有它们的ValueConversion属性,但代码现在仍在编译。也许关于第一个转换器中传入类型的东西是模糊的。

它仍然有点神秘。我知道我应该退出我的更改,看看错误是否可以重现,但是在一天的大部分时间里对抗这些代码后我都厌倦了看它。这是一个没有运行的旧Prism项目,我将其升级到Prism 7.0库。我还尝试将所有处理器设置重置为“任何CPU”。它抱怨引导程序已经过时,但我忽略了它。我重新启动并多次清理所有内容。我甚至删除了.vs文件夹。我可能应该早点尝试直接删除obj和bin文件夹 - 这是我没做过的一件事。

这不是我的项目。通常我总是将值转换器构建到文件中,文件名称相同。我不认为这很重要,但整个错误在一开始就有点疯狂。

答案 5 :(得分:0)

通常,当我遇到此问题时,我注意到Visual Studio在错误列表中列出了“错误”错误,并使我处于错误的轨道。在Visual Studio的输出窗口中查看实际的生成输出会显示正确的错误。

简而言之:将构建输出与错误列表进行比较。

答案 6 :(得分:0)

如果您使用 NuGet 包,请尝试更改项目中的 Dot.Net 版本并更新已安装的包。

答案 7 :(得分:-1)

就我而言,解决方案是删除我克隆的存储库(意味着所有项目文件)并再次克隆它。这样你就可以确保即使是那些 git-ignored 的文件也被删除了。

PS:当您使用 Visual Studio 开始 git-tracking 项目时,它会自动为您生成 .gitignore 文件。如果您没有使用 Visual Studio 启动 git-tracking,您可以在 Internet 上找到 .gitignore 文件(例如 https://github.com/github/gitignore/blob/master/VisualStudio.gitignore)。另请注意,在您已经开始跟踪文件后,您不能 git-ignore 文件(从技术上讲,您可以,但它需要做一些我们大多数人都无法做到的 git 巫术)。