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 有效:
- 将 class 移动到不同的命名空间,然后在 xaml 引用中使用新的命名空间
- 重启VS和cleaning/rebuilding解决方案
- 清理解决方案,然后重命名其文件夹,然后再次构建解决方案
- 将引用更改为:
xmlns:local="clr-namespace:MyNamespace;assembly="
编辑:附加信息:目标架构:X64,目标框架:.Net 4.5
针对您尚未指定为尝试过的这个已知 VS 错误的一个常见解决方案是更改构建目标平台。
如果您当前的构建目标平台是 x64,请更改为 x86。如果当前是 x86,请更改为 x64。
为新目标平台清理和构建解决方案。
改回所需的目标平台并重新构建。
我在 VS2012 速成版中遇到了同样的问题。使用命令
解决了问题
"WDExpress/ResetSettings" 在 vs2012 命令提示符中。
一个可能的解决方案是从 Debug 和 Release 中删除所有 .dll 文件文件夹。
因为有时当您引用项目时,它会引用预构建的 dll,即使您 运行 您的项目处于调试模式。
从 debug 和 release 文件夹中删除所有文件并再次构建该项目,现在将此项目的引用添加到您想要的位置。在我这边工作得很好。
我遇到了类似的问题。为我修复它的是更改项目的构建属性,这是作为参考添加的。原来 "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 版本并更新已安装的包。
我正在使用 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 有效:
- 将 class 移动到不同的命名空间,然后在 xaml 引用中使用新的命名空间
- 重启VS和cleaning/rebuilding解决方案
- 清理解决方案,然后重命名其文件夹,然后再次构建解决方案
- 将引用更改为:
xmlns:local="clr-namespace:MyNamespace;assembly="
编辑:附加信息:目标架构:X64,目标框架:.Net 4.5
针对您尚未指定为尝试过的这个已知 VS 错误的一个常见解决方案是更改构建目标平台。
如果您当前的构建目标平台是 x64,请更改为 x86。如果当前是 x86,请更改为 x64。
为新目标平台清理和构建解决方案。
改回所需的目标平台并重新构建。
我在 VS2012 速成版中遇到了同样的问题。使用命令
解决了问题"WDExpress/ResetSettings" 在 vs2012 命令提示符中。
一个可能的解决方案是从 Debug 和 Release 中删除所有 .dll 文件文件夹。
因为有时当您引用项目时,它会引用预构建的 dll,即使您 运行 您的项目处于调试模式。
从 debug 和 release 文件夹中删除所有文件并再次构建该项目,现在将此项目的引用添加到您想要的位置。在我这边工作得很好。
我遇到了类似的问题。为我修复它的是更改项目的构建属性,这是作为参考添加的。原来 "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 版本并更新已安装的包。