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

WPF: The name does not exist in the namespace

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

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 不断报告

The name "MyKey" does not exist in namespace "clr-namespace:MyNamespace"

有什么想法吗?

P.S。我尝试了以下解决方案(来自已在 Whosebug 中发布的问题),但其中 none 有效:

  1. 将 class 移动到不同的命名空间,然后在 xaml 引用中使用新的命名空间
  2. 重启VS和cleaning/rebuilding解决方案
  3. 清理解决方案,然后重命名其文件夹,然后再次构建解决方案
  4. 将引用更改为:

xmlns:local="clr-namespace:MyNamespace;assembly="

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

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

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

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

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

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

解决了问题

"WDExpress/ResetSettings" 在 vs2012 命令提示符中。

一个可能的解决方案是从 DebugRelease 中删除所有 .dll 文件文件夹。

因为有时当您引用项目时,它会引用预构建的 dll,即使您 运行 您的项目处于调试模式。

debugrelease 文件夹中删除所有文件并再次构建该项目,现在将此项目的引用添加到您想要的位置。在我这边工作得很好。

我遇到了类似的问题。为我修复它的是更改项目的构建属性,这是作为参考添加的。原来 "Platform target" 过去已经被改变了。将其设置为 "Any CPU" 并重建它解决了错误。

运行 VS Enterprise 2017 版本 15.6.2 针对 .Net 4.6.1

我在 UserControl xaml 页面中遇到了同样的问题,它在其资源中试图引用 ValueConverter。命名空间是正确的,智能感知甚至会为您放入它,但设计器不会加载页面,代码也不会编译。我什至尝试将其中一个值转换器移出有问题的文件和命名空间,并将其移至 code-behind。 VS 被吓坏了,它声称 code-behind 构造函数中的 InitializeComponent() 方法是 non-existent。

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

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

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

这仍然是个谜。我知道我应该撤消我的更改并查看错误是否可重现,但是在一天的大部分时间与该代码作斗争之后我厌倦了看它。这是一个旧的 Prism 项目,不是 运行,我将它升级到 Prism 7.0 库。我还尝试将所有处理器设置重置为 'Any CPU'。它抱怨引导程序已过时,但我忽略了它。我重新启动并多次清理所有内容。我什至删除了 .vs 文件夹。我可能应该早点尝试彻底删除 obj 和 bin 文件夹 - 这是我没有做的一件事。

这不是我的项目。通常我总是将值转换器构建到一个文件中,文件名相同。我认为这无关紧要,但整个错误首先有点疯狂。

通常,当我遇到这个问题时,我注意到 Visual Studio 在错误列表中列出了 'wrong' 个错误,这让我走错了路。查看 Visual Studio 的输出 window 中的实际构建输出显示了正确的错误。

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

在我的例子中,解决方案是删除我克隆的存储库(意味着所有项目文件)并再次克隆它。通过这种方式,您可以确保甚至删除那些 git-忽略的文件。

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

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