名称“XYZ”在命名空间“clr-namespace:ABC”中不存在。

71

我正在创建一些标记扩展,并开始出现非常奇怪的VS行为。我已经在单独的解决方案中提取并定位了问题。问题是VS无法在XAML中创建CLR对象。

这是代码:

视图:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication4="clr-namespace:WpfApplication4">
    <Window.Resources>
        <wpfApplication4:Dog x:Key="doggy" />
    </Window.Resources>
    <Grid />
</Window>

后台代码:

using System.Windows;

namespace WpfApplication4
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

狗类:

namespace WpfApplication4
{
    public class Dog
    {

    }
}

App.Xaml(App.Xaml.cs中没有代码):

<Application x:Class="WpfApplication4.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

项目设置

我遇到的异常:

Error   1   The name "Dog" does not exist in the namespace "clr-namespace:WpfApplication4". \\hopr1\folders$\vxk\Documents\Visual Studio 2012\Projects\WpfApplication4\MainWindow.xaml  6   9   WpfApplication4

我能够运行解决方案,但设计师出现“无效标记”错误。有任何想法吗?

编辑

我正在运行VS 2012 Update 2,相同的解决方案在VS 2012 Update 1中有效。


5
听起来有些奇怪 - 我注意到你正在网络共享上运行这个应用程序?\hopr1\folders$\vxk\Documents。你能否尝试在本地驱动器(例如C:\)上执行完全相同的操作?我之所以这样问是因为当我的解决方案存储在网络位置时,我曾经看到过非常不合理的VS行为。 - GrahamMc
我遇到了相同的问题,但我没有使用网络共享。 我在项目中本地开发了一个ValueConvertor,一切都运行良好,然后我将其移动到我们的中央库并尝试从那里使用它,结果出现了OP描述的错误。XAML设计器坚持认为找不到该类,但应用程序可以编译和构建。真的很恼人,因为我无法再预览我的XAML了。 - belugabob
2
好的 - 我已经解决了。被引用的 DLL 被标记为“不受信任”,所以我必须修复它(http://wpflocalizeextension.codeplex.com/discussions/399736),然后关闭解决方案,删除“suo”文件,再重新打开项目。 - belugabob
谢谢belugabob - 我想我应该考虑修改我的答案,以表明问题发生是因为“信任”问题,而不是直接因为在共享上运行;问题只是在那里发生,因为UNC共享默认情况下没有完全受信任。 - GrahamMc
1
重建项目/解决方案让我摆脱了错误。 - Zoomzoom
显示剩余2条评论
21个回答

121

对于现在看到这篇文章的任何人,在您执行任何其他操作之前......如果您确定您的类/命名空间是正确的,而重新构建没有解决您的问题:

尝试重新启动Visual Studio

就是这样!

这似乎是Visual Studio 2012的一个bug(似乎也影响所有支持XAML开发的其他版本)


更新:如果重新启动Visual Studio不起作用,请重新启动整个PC。

更新:如@Dunk的评论所述,如果重新启动Visual Studio不起作用,请尝试删除.suo文件


4
谢谢你,你帮我省了几个小时找答案。我在使用VS2013升级2时遇到了这个问题,重新启动解决了它。 - Apogee
1
@GrahamMc 对不起,我完全不知道。我只遇到过这个问题一次,使用这种方法解决后就再也没有遇到过这个问题了。顺便说一下,这是在本地运行时发生的,而不是在网络共享上。 - Apogee
11
我退出了Visual Studio,按照另一个用户的建议删除了.suo文件,并重新启动了Visual Studio,这解决了问题。我不确定是重新启动还是删除.suo文件解决了问题,但两者都很简单。 - Dunk
3
重新启动了几次,没有起到作用。删除.suo文件起作用了。 - Branislav Lazic
3
也适用于VS2013更新4版本。删除.suo文件可以解决问题。 - liang
显示剩余18条评论

49

您的解决方案正在运行于网络共享上。.Net(和Visual Studio)应用程序在运行于网络共享时可能会遇到权限/访问问题。

将您的解决方案复制到本地驱动器(以完全信任方式),那么您就不会有问题了。

虽然可以通过一些方法使网络驱动器具有完全信任,您可以在StackOverflow等地方找到相关答案,但我从经验中发现这样做时会遇到障碍,因此,除非问题确实需要,否则尽量避免使用网络驱动器。

例如,此问题提供了有关如何执行此操作的说明:

为Visual Studio 2012和.Net 4.0赋予UNC共享完全信任

我只尝试过VS2010,所以(如链接中所示)使用2012可能会更好。


2
请注意,根据belugabobs在问题上的评论,此问题可能发生在除网络共享外的其他地方 - 任何没有完全信任的位置。有人可能能够阐明问题的确切原因,而不仅仅是解决方案。 - GrahamMc
3
在 Parallels 上运行 Visual Studio 并将解决方案存储在 Mac 文件系统上似乎也会导致此问题(Parallels 使用网络共享来访问 OS X 文件系统)。将解决方案复制到虚拟 C 盘的绝对路径上可以解决这个问题。 - Mick MacCallum

32

我曾经遇到过相同的问题,但我的文件是存储在本地的。我的IValueConverter存储在与使用它的视图不同的程序集中。即使VS2013 IntelliSense建议以下内容,它也不能正常工作:

xmlns:conv="clr-namespace:MySharedAssembly.Converters"

在我明确在结尾处添加汇编语言代码之后,它就起作用了:

xmlns:conv="clr-namespace:MySharedAssembly.Converters;assembly=MySharedAssembly"

1
做完所有的事情,然后再做最后这个。我会先尝试这个,然后重新启动或删除 ".suo" 文件。如果这样不起作用,再采取大量的解决办法。非常感谢,@Wouter。 - TheNoob

12

我被这个错误困扰了几个小时。程序集和命名空间是正确的,类和引用也是正确的。编译和运行都没有问题,只有设计师与我有些问题。唯一有效的方法:

  1. 为了设计目的,从x64切换到x86
  2. 为了运行和调试,切回到x64

我正在使用一个第三方便携式库,但它只有x64版本。


类似于我所做的。我从x64切换到Any CPU(并关闭了Prefer 32-bit)。我重新构建,然后能够将其恢复到x64配置文件并重新构建,而不会收到那个愚蠢的错误! - Nicholas Miller
尝试过重启但没有起作用。转换到32位后可以工作。 - Syaiful Nizam Yahya
我曾经遇到过完全相同的问题。我的项目引用了一个64位的DLL,但是设置为任何CPU。将主项目设置为x64并重新编译后,问题得到解决。 - jettatore

11

下载的 DLL 解决方案

  1. 解锁 .dll 文件
    • 右键单击该文件并选择属性
    • 在 "常规" 选项卡中解锁它(见下图)
  2. 确保VS重新验证XAML(可能需要重新启动VS)

输入图像描述


4
谢谢,当我清除了ShadowCache后,这对我起作用了。 %localappdata%\Microsoft\VisualStudio\14.0\Designer\ShadowCache - StevenGodin
太好了!你真是个天才!在尝试了几乎一个小时的所有其他建议后,你的建议终于解决了问题。我使用的是Windows 10和VS2015。控件位于第三方dll中。必须关闭并重新打开解决方案才能使修复生效。 - Eternal21
@DeadlyGhost1 最终删除ShadowCache文件夹中的所有内容对我也起作用了!考虑将您的评论转化为答案 ;) - Tobi o' Bobi
VS2013 - 我必须解除 .xaml 的阻止。 - SBF

6

在VS 2015中仍然会出现这种情况。我从App.xaml中删除了SomeConverter:

<Application.Resources>
    <!--Value Converters-->
    <local:SomeConverter x:Key="mySomeConverter"/>

Strg-Shift-B
将其重新插入 - 然后它就能正常工作了。


4

在尝试复杂的解决方案之前,请尝试以下方法:

我遇到了完全相同的问题,我关闭了导致错误的窗口/表单,然后运行了项目。

一旦项目成功运行,错误似乎就会消失,并且没有再出现过。

希望这可以帮助任何寻求快速解决方案的人。


我也刚刚发现了这个问题。我有一些 .xaml 文件打开。在我的情况下,这导致了 23 个错误。一旦我关闭了这些文件并重新构建了解决方案(而且我没有做任何更改),它就可以正常构建了。关于这个问题,Visual Studio 2019 还存在一些问题。 - Rod

3

在本地驱动器上创建指向网络共享的符号链接。

进入命令行并键入mklink /D C:\LOCALFOLDER \YOURNETWORKPATH

然后从本地文件夹打开项目,所有问题都会消失。现在,所有文件仍将位于您的网络共享中。:)


这对我从来没有起作用,直到我把所有东西都移到本地磁盘上,我仍然有问题。 - Duncan Groenewald
这对我非常有效,我的项目位于我的Mac主文件夹中,并且我通过PSF共享在Parallels VM中使用它。绝妙的想法,谢谢! - Michael

3

我正在开始一个新项目,遇到了这个问题。包括删除suo文件、卸载/重新加载项目、重启VS等在内的所有解决方案都对我无效。

对我有用的是,因为这是一个新项目,我还没有构建它。我将Window.DataContext元素复制到剪贴板中,再构建一次(shift-ctrl-b),然后重新添加该元素,它立即起作用。


2

我在使用Visual Studio 2015时遇到了同样的错误,通过取消“禁用项目代码按钮”选项,我成功地使设计师工作。

设计师按钮截图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接