【问题标题】:The name "XYZ" does not exist in the namespace "clr-namespace:ABC"名称空间“clr-namespace:ABC”中不存在名称“XYZ”
【发布时间】:2013-04-19 11:03:04
【问题描述】:

我正在创建一些标记扩展并开始获得非常奇怪的 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 中的解决方案相同

【问题讨论】:

  • 这听起来很奇怪 - 我注意到您正在网络共享上运行应用程序? \\hopr1\folders$\vxk\Documents 你能在像 C:\ 这样的本地驱动器上尝试完全相同的事情吗 - 我问的原因是,当我将解决方案存储在网络位置时,我在 VS 中看到了非常不合理的行为
  • 那行得通,很好发现!将此添加为答案,我会将其标记为正确答案!
  • 很高兴它工作 - 如果你设法让它在网络共享上工作,请“分享”你的解决方法(双关语:)
  • 好的——刚刚修好了。被引用的 DLL 被标记为“不受信任”,所以我必须修复它(wpflocalizeextension.codeplex.com/discussions/399736),然后我必须关闭解决方案,删除“suo”文件,然后重新打开项目。
  • 重建项目/解决方案为我消除了错误。

标签: c# wpf xaml


【解决方案1】:

对于现在遇到此问题的任何人,在你做任何其他事情之前......如果你确定你的类/命名空间是正确的并且重建没有解决你的问题:

尝试重新启动 Visual Studio

就是这样!

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


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

更新:@Dunk 在 cmets 中提到,如果重新启动 Visual Studio 不起作用,请尝试删除 .suo 文件

【讨论】:

  • 感谢您,您为我节省了几个小时寻找答案的时间。这在 VS2013 Update 2 中发生在我身上并重新启动修复它。
  • @GrahamMc 恐怕根本不知道。我只见过一次这个问题,这解决了它,从那以后再也没有见过这个问题。这是在本地运行时,而不是在网络共享上。
  • 我退出了 Visual Studio,删除了 .suo 文件(根据其他用户的建议)并重新启动了 Visual Studio,从而解决了这个问题。我不确定重新启动或删除 .suo 文件是否是解决方案,但两者都很简单。
  • 重启VS几次。没有帮助。 .suo 文件的删除工作。
  • 也适用于 VS2013 Update 4。删除 .suo 文件有效。
【解决方案2】:

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

将您的解决方案复制到本地驱动器(完全信任),您应该没问题。

可以让网络驱动器在完全信任的情况下工作 - 你可以在 StackOverflow 和其他地方找到答案 - 但根据我的经验,我这样做时会遇到障碍,所以尽量避免它,除非它是绝对的对手头的问题至关重要。

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

Give FullTrust to UNC share for Visual Studio 2012 and .Net 4.0

我只在 VS2010 上试过这个,所以(如链接中所示)你可能会更喜欢 2012。

【讨论】:

  • 请注意,根据 belugabobs 对该问题的评论,此问题可能发生在网络共享以外的其他地方 - 任何没有完全信任的位置。有人可能能够阐明究竟是什么导致了问题,而不仅仅是解决方案是什么
  • 在 Parallels 中运行 Visual Studio 并将您的解决方案存储在 Mac 的文件系统上似乎也会导致这种情况(Parallels 使用网络共享来访问 OS X 文件系统)。将解决方案复制到虚拟 C 驱动器上的绝对路径为我解决了这个问题。
【解决方案3】:

我遇到了同样的问题,但我的文件存储在本地。我的 IValueConverter 与使用它的视图位于不同的程序集中。即使 VS2013 IntelliSense 提出以下建议,它也不起作用:

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

在我最后明确添加程序集后,它起作用了:

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

【讨论】:

  • 什么都做,然后最后做。我会先试试这个,然后重新启动 vs/delete .suo。然后,如果这不起作用,请做大量的解决方法。非常感谢@Wouter
【解决方案4】:

我在这个错误上坚持了几个小时。程序集和命名空间是正确的,类和引用也是正确的。编译运行正常,只有设计师对我有一些问题。唯一有效的方法

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

我正在使用只有 x64 版本的 3d 派对portable.library。

【讨论】:

  • 与我所做的类似。我从 x64 切换到 Any CPU(并关闭了 Prefer 32-bit)。我重建了,然后能够将其恢复到 x64 配置文件并重建而没有收到那个愚蠢的错误!
  • 尝试重启但不起作用。切换到 32 位有效。
  • 我遇到了完全相同的问题。我的项目引用了 64 位 DLL,但设置为 Any CPU。将主工程设置为x64并重新编译后,问题解决了。
【解决方案5】:

下载的DLL解决方案

  1. 取消阻止 .dll 文件
    • 右键单击它并选择属性
    • 在“常规”选项卡中取消阻止(见图)
  2. 确保 VS 重新验证 XAML(可能通过重新启动它)

【讨论】:

  • 谢谢,当我还清除了 ShadowCache 时,这对我有用。 %localappdata%\Microsoft\VisualStudio\14.0\Designer\ShadowCache
  • 见鬼!你是男人!在花了将近一个小时尝试所有其他建议之后,你的终于成功了。我在 Windows 10 上,使用 VS2015。该控件位于第 3 方 dll 中。必须关闭并重新打开解决方案才能使修复生效。
  • @DeadlyGhost1 删除 ShadowCache 文件夹中的所有内容也对我有用!考虑将您的评论变成答案;)
  • VS2013 - 我必须解除对 .xaml 的阻止
【解决方案6】:

它仍然发生在 VS 2015 中。我在 App.xaml 中取出了 SomeConverter:

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

Strg-Shift-B
把它放回去 - 它工作了。

【讨论】:

    【解决方案7】:

    在尝试广泛的解决方案之前,请尝试以下操作:

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

    一旦项目成功运行并且没有恢复,错误似乎就消失了。

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

    【讨论】:

    • 我也刚刚发现了这一点。我打开了一些 .xaml 文件。就我而言,这导致了 23 个错误。一旦我关闭了文件并重建了解决方案(我根本没有做任何更改),它就可以正常工作了。 Visual Studio 2019 仍然存在问题。
    【解决方案8】:

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

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

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

    【讨论】:

    • 这对我来说从来没有用过,直到我将所有内容都移动到本地磁盘之前我仍然遇到问题。
    • 这对我来说很好,项目位于我的 Mac 的主文件夹中,我通过 PSF 共享在 Parallels VM 中使用它。好主意,谢谢!
    【解决方案9】:

    我正在开始一个新项目并遇到此问题。此处列出的解决方案均不适合我,包括删除 suo 文件、卸载/重新加载项目、重新启动 VS 等。

    对我有用的是,因为这是一个新项目,我还没有建造它。我将 Window.DataContext 元素删除到剪贴板,构建了一次项目(shift-ctrl-b),然后重新添加该元素并立即运行。

    【讨论】:

      【解决方案10】:

      我在 Visual Studio 2015 中遇到了同样的错误,并通过取消选中“禁用项目代码按钮”设法让设计器工作。

      【讨论】:

        【解决方案11】:

        我在网络共享上也有一个项目,但意外出现了此错误。我尝试了上面的所有建议,包括将项目复制到本地磁盘、清理、重建以及打开和关闭 VS。这些都没有解决问题。

        对我有用的只是删除对 viewmodels 文件夹的命名空间引用 (xlmns:vm="clr-namespace:Myproj.ViewModel")。

        我将类型添加到我的 xaml (DataTemplate DataType="{x:Type vm:myviewmodel}")。 Visual Studio 然后检测到命名空间丢失,我单击提示添加命名空间。

        【讨论】:

          【解决方案12】:

          这在 2008 年、10 年、12 年、13 年一直困扰着我。

          每当发生这种情况(是的,我正在处理网络共享 - 我无法避免),我关闭 VS,重命名文件夹并重新打开项目。 10 次中有 9 次有效。一会儿。

          【讨论】:

          • 我遇到过这种情况,但 NOT 在网络共享上,只是一个本地文件夹,发现唯一的解决方案是关闭 VS (2013) 并重命名解决方案文件夹到别的东西。或者,我可以重新定位未正确加载的 dll 并更新参考。
          【解决方案13】:

          对于其他卡住的人。

          对我有用的是将命名空间别名从 local 更改为其他任何内容。

          xmlns:local="clr-namespace:ExampleNameSpace.Folder" />
          
          <Grid>
              <StackPanel>
                  <local:ReferencedUserControl />
              </StackPanel>
          </Grid>
          

          到

          xmlns:blah="clr-namespace:ExampleNameSpace.Folder" />
          
          <Grid>
              <StackPanel>
                  <blah:ReferencedUserControl />
              </StackPanel>
          </Grid>
          

          希望这会有所帮助!

          【讨论】:

            【解决方案14】:

            有同样的问题。当我意识到有问题的课程被标记为internal时,为我解决了这个问题:

            internal class MyClass
            {
            }
            

            将其更改为public 后,设计人员能够正确编译XAML。

            【讨论】:

              【解决方案15】:

              对我有用的是将 @987654324 中 Post Build 中的 MOVE 更改为 XCOPY @,然后是 re-build 项目。设计者可能想要项目输出文件夹中的 dll。 我正在使用 vs 2015

              【讨论】:

              • 这可能是有道理的..您对此有任何进一步的信息吗?
              • @Martin,没有人 :-( 在我尝试过的众多方法中,上述方法是唯一一种对我有用的方法。
              【解决方案16】:

              重新启动 Visual Studio 后,我收到一个 IntelliSense 错误,指出我的方向正确。

              因为 'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionTypeNode' 在同一个程序集中实现,必须设置 x:Name 属性 而不是 Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionPropertyNode 属性。

              所以我改变了这个:

              <local:MyView Name="test"/>
              

              到这里:

              <local:MyView x:Name="test"/>
              

              然后它起作用了。那么,这给了我们什么? 42 可能的原因?虚幻……

              【讨论】:

                【解决方案17】:

                在资源字典中声明它对我有用。

                <Window.Resources>
                    <c:IsNullConverter x:Key="IsNullConverter" />
                </Window.Resources>
                

                问题似乎是解析器在看到像Converter={c:IsNullConverter}}" 这样的标记扩展时会自行处理,但可以使用:Converter={StaticResource IsNullConverter}。 我想也许这就是问题所在。

                Windows 10,VS 2013

                【讨论】:

                  【解决方案18】:

                  我在项目中有 3 个错误,并且专注于这个与 ObjectDataProvider 相关的错误。我发现如果由于其他错误而无法构建项目,则无法解决此错误。我还有其他几个事件处理程序的代码已被删除。我还需要删除试图将处理程序链接到控件的代码。然后项目能够构建并看到我试图从 ObjectDataProvider 引用的类可用。

                  【讨论】:

                    【解决方案19】:

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

                    解决了!!

                    检查你要调用的函数/类是否存在于命名空间中

                    正确的例子:

                    .XAML 文件

                              <Window x:Class="objectbinding.MainWindow"
                               <!--your xmlns:x .......
                               namespace1 is the project name-->
                               xmlns:m="clr-namespace:namespace1"
                                Title="MainWindow" Height="350" Width="525">
                        <Grid>
                     <StackPanel Orientation="Vertical">
                                <StackPanel.Resources>
                                    <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                                        x:Key="anyname" MethodName="GetStrings"/>
                    
                                </StackPanel.Resources>
                    

                           ItemsSource="{Binding Source={StaticResource Runni}}" />
                            </StackPanel>
                        </Grid>
                    

                    //StringData是xaml.cs中的类名,GetString是Function

                    .XAML.CS 文件

                     namespace namespace1
                        {
                    
                            public partial class MainWindow : Window
                            {
                                public MainWindow()
                                {
                                    InitializeComponent();
                                }
                    
                            }
                    // the class StringData is defined in namespace namespace 1
                            public class StringData
                            {
                                ObservableCollection<String> lst = new ObservableCollection<String>();
                    
                                public StringData()
                                {
                                    lst.Add("Abhishek");
                                    lst.Add("Abhijit");
                                    lst.Add("Kunal");
                                    lst.Add("Sheo");
                                }
                                public ObservableCollection<String> GetStrings()
                                {
                                    return lst;
                                }
                            }
                        }
                    

                    错误的例子:

                    .XAML 文件

                      <Window x:Class="objectbinding.MainWindow"
                                  <!--your xmlns:x .......
                               namespace1 is the project name-->
                               xmlns:m="clr-namespace:namespace1"
                                Title="MainWindow" Height="350" Width="525">
                        <Grid>
                     <StackPanel Orientation="Vertical">
                                <StackPanel.Resources>
                                    <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                                        x:Key="anyname" MethodName="GetStrings"/>
                    
                                </StackPanel.Resources>
                    

                           ItemsSource="{Binding Source={StaticResource Runni}}" />
                            </StackPanel>
                        </Grid>
                    

                    .XAML.CS

                    namespace namespace1
                    {
                    
                        public partial class MainWindow : Window
                        {
                            public MainWindow()
                            {
                                InitializeComponent();
                            }
                    //The StringData is defined in the class mainWindow not in namespace namespace1
                            public class StringData
                            {
                                ObservableCollection<String> lst = new ObservableCollection<String>();
                    
                                public StringData()
                                {
                                    lst.Add("Abhishek");
                                    lst.Add("Abhijit");
                                    lst.Add("Kunal");
                                    lst.Add("Sheo");
                                }
                                public ObservableCollection<String> GetStrings()
                                {
                                    return lst;
                                }
                            }
                        }
                    
                    }
                    

                    【讨论】:

                      【解决方案20】:

                      在我的情况下,此错误是由于启用了“仅延迟签名”的签名程序集引起的。解决方案是从开发人员控制台(以管理员身份)运行命令sn -Vr *。这将注册程序集以进行验证跳过。然后重启 Visual Studio。

                      【讨论】:

                        【解决方案21】:

                        这可能是由于发布配置。 Designer 需要从 Debug 配置中使用。

                        【讨论】:

                        • 有什么问题?我写它是因为它对我有帮助。
                        猜你喜欢
                        • 1970-01-01
                        • 2012-12-06
                        • 2016-11-29
                        • 2014-01-16
                        • 1970-01-01
                        • 2023-03-07
                        • 2015-11-30
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多