名称“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个回答

1
我还有一个存储在网络共享文件夹中的项目,出现了这个意外错误。我尝试了上述所有建议,包括将项目复制到本地磁盘、清理、重建以及打开和关闭VS。但这些都没有解决问题。
对我起作用的是简单地删除对viewmodels文件夹的命名空间引用(xlmns:vm="clr-namespace:Myproj.ViewModel")。
我在我的xaml中添加了类型(DataTemplate DataType="{x:Type vm:myviewmodel}")。然后Visual Studio检测到缺少命名空间,并点击提示添加命名空间。

0

我曾经遇到过同样的问题。解决方法是当我意识到相关的类被标记为internal时。

internal class MyClass
{
}

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


0

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

问题已解决!

请检查您想要调用/类是否存在于命名空间中

正确的示例:

.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 is the class name in xaml.cs and GetString is the Function

.XAML.CS file

 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;
            }
        }
    }

Wrong example:

.XAML File

  <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;
            }
        }
    }

}


0

对于其他卡住的人。

对我有用的是将命名空间别名从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>

希望这能帮到你!


0

在重新启动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种可能的原因?不可思议...


0

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

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

问题似乎出在解析器看到像Converter={c:IsNullConverter}}"这样的标记扩展时会出现错误,但是对于Converter={StaticResource IsNullConverter}则没有问题。我认为这可能就是问题所在。

Windows 10,VS 2013


0

我的项目有 3 个错误,我专注于与 ObjectDataProvider 相关的错误。后来我发现,如果项目因为其他错误而无法构建,则此错误无法解决。我还删除了一些事件处理程序的代码,需要同时删除尝试将处理程序链接到控件的代码。然后,该项目能够构建并查看我尝试从 ObjectDataProvider 引用的类是否可用。


0

这个问题困扰我多年,从2008年、10年、12年到13年。

每当这种情况发生时(是的,我正在使用网络共享——我无法避免),我会关闭VS,重命名文件夹,然后重新打开项目。十次中有九次,这种方法都有效。但只是暂时的。


我曾经遇到过这种情况,但是不是在网络共享上,而是在本地文件夹中。我发现唯一的解决办法是关闭VS(2013),并将解决方案文件夹重命名为其他名称。或者,我也可以重新定位未能正确加载的dll并更新引用。 - pjs

0
我的解决办法是在项目属性的“Post Build”中将“MOVE”更改为“XCOPY”,然后重新构建项目。设计人员可能希望dll在项目输出文件夹中。我正在使用vs 2015

这可能有道理。你有关于此的更多信息吗? - Jordan
@Martin,没关系哦:-( 以上方法是我尝试过的众多方法中唯一有效的一种。 - Sony

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

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