70

我正在努力创建一些标记扩展并开始获得非常奇怪的 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 中工作

4

21 回答 21

119

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

尝试重新启动 Visual Studio

而已!

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


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

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

于 2014-03-14T13:49:28.067 回答
49

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

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

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

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

将 FullTrust 授予 Visual Studio 2012 和 .Net 4.0 的 UNC 共享

我只在 VS2010 上试过这个,所以(如链接中所示)你可能会对 2012 年感到更高兴。

于 2013-04-25T14:56:04.800 回答
32

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

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

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

xmlns:conv="clr-namespace:MySharedAssembly.Converters;assembly=MySharedAssembly"
于 2014-07-22T18:35:18.920 回答
11

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

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

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

于 2015-04-09T16:58:35.297 回答
11

下载的DLL解决方案

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

在此处输入图像描述

于 2015-12-13T13:09:53.567 回答
6

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

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

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

于 2015-11-25T12:58:45.477 回答
4

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

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

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

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

于 2016-09-06T10:03:27.013 回答
3

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

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

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

于 2014-07-09T10:22:43.453 回答
3

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

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

于 2015-05-29T08:33:23.490 回答
2

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

设计器按钮的屏幕截图

于 2017-02-23T15:05:18.393 回答
1

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

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

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

于 2016-10-20T06:44:33.050 回答
0

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

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

于 2014-06-09T15:17:18.550 回答
0

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

于 2017-07-22T18:54:38.107 回答
0

有同样的问题。当我意识到有问题的课程被标记为internal

internal class MyClass
{
}

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

于 2016-01-29T23:44:24.413 回答
0

对我有用的是在项目中更改MOVE为。设计者可能想要项目输出文件夹中的 dll。我正在使用 vs 2015XCOPYPost Buildproject propertiesre-build

于 2016-03-29T18:20:02.137 回答
0

名称空间“clr-namespace:ABC”中不存在名称“XYZ”</p>

解决了!!

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

正确的例子:

.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是函数

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

}
于 2017-11-20T08:52:21.263 回答
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 可能的原因?虚幻...

于 2016-10-14T14:37:41.633 回答
0

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

于 2017-12-01T11:12:55.490 回答
0

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

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

问题似乎是解析器在看到类似 的标记扩展时会自行拉屎Converter={c:IsNullConverter}}",但对 : 很好Converter={StaticResource IsNullConverter}。我想也许这就是问题所在。

视窗 10,VS 2013

于 2016-11-29T09:51:54.007 回答
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>

希望这可以帮助!

于 2015-12-07T11:16:40.463 回答
-2

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

于 2016-02-20T22:32:32.687 回答