【问题标题】:Visual studio 2012 XAML designer invalid markupVisual Studio 2012 XAML 设计器无效标记
【发布时间】:2012-10-03 23:52:14
【问题描述】:

我有一个包含用户控件的项目。由于某种原因,使用上述控件的窗口的设计视图已停止运行并坚持“无效标记” - 给出的错误是用户控件的某些成员无法识别或无法访问。然而,该项目编译并执行得很好。在 VS2010 中加载它,编辑器工作正常,没有任何错误 - 即使在 Expression Blend 中也是如此。

到目前为止,我已经尝试了典型的清理、重建、手动从 obj 中删除内容、更新 .xaml 和重建,尝试使用 /resetuserdata 和 /resetsettings 启动 VS2012 - 问题仍然存在。我什至回滚到我的项目的一个更旧的版本,当设计师工作得很好时,没有骰子——同样的错误。我还尝试以新的 Windows 用户身份启动 VS2012,以避免任何存储的 appdata 可能会挥之不去,再次失败。

是否有其他类型的缓存或我可以手动删除的东西?

【问题讨论】:

  • 您最近更新silverlight。在控制面板中检查 Silverlight、Silverlight Developer、Silverlight Toolkit 的所有版本是否相同。与 SL5 存在不兼容问题。希望有所帮助!
  • 不,我没有发生任何与 Silverlight 相关的更改。我已经将其追溯到用户控件中的自定义属性——它们的某些东西让 VS2012 中的设计者感到困惑,但到目前为止我无法弄清楚。
  • 哦,对不起,我没有注意到 VS2012。我不知道。
  • 你有想过这个吗?我也有同样的问题!

标签: wpf xaml user-controls visual-studio-2012 designer


【解决方案1】:

可能是您添加了不受支持的用户控件,或者您可能在用户控件中添加了错误的父子关系。尝试删除可疑的用户控件并重建项目。它必须解决问题。 干杯

【讨论】:

    【解决方案2】:

    我只是遇到了同样的问题(程序编译和运行正常,XAML 设计器报告无效标记),问题是我不小心更改了我的解决方案中一个项目的程序集名称,我把它改回来了,我的 XAML设计师重新焕发生机,因此请检查解决方案中每个项目的“属性”页面,并确保“程序集名称”与您预期的一样。

    【讨论】:

      【解决方案3】:

      我不确定这是否能解决所有问题,但这对我有用(现在一直如此)。

      我有 VS2012,在 IDE 中使用 Blend 设计器,构建一个 x64 应用程序,当我定义一个新的 ICommand 并添加 Command 属性时,我会得到 x64 错误中不支持设计器(我忘记了确切的警告)。如果我切换到 x86,我会收到无效的 XAML 标记错误,抱怨 ICommand 无法识别或无法访问,无论我在 x64 中重建多少次。如果我切换到 x86,构建,然后切换回 x64,瞧,设计师没有问题。

      现在我回想起 VS2008 和 Blend 版本 3 和 4 的类似问题。根据我在其他帖子中读到的内容,使用 Any CPU 也可能会解决问题。

      【讨论】:

      • 在 VS 2013 Express 中,我看到错误“设计视图无法正确显示,因为某些自定义元素尚未构建。”当目标是 X64 时,与将枚举类型绑定到组合框或列表框所需的 ObjectDataProvider XAML 元素相关的错误。切换到“Any CPU”允许设计人员工作。然后我切换回 X64 并且构建工作没有设计器错误。
      【解决方案4】:

      您需要重新:编码您的 xaml,在 ide 中打开错误文件 -> 另存为 -> 保存编码(选择 UTF8)

      【讨论】:

        【解决方案5】:

        我认为您的项目没有问题,但在 VS 2012 中是问题。尝试安装 VS 2012 的最新更新(更新 2)并检查此answer

        问候,

        【讨论】:

          【解决方案6】:

          我在使用带有自定义(无参数)构造函数的控件时遇到了同样的问题。

          检查自定义/用户控件构造函数是否不需要 WPF 设计器没有的任何数据。快速等待通过尝试捕获、清理、重建来检查整个事物周围的情况,然后检查问题是否已解决。

          如果不是,请尝试注释除默认 WPF Init 代码之外的所有内容,清理、重建并测试它。

          【讨论】:

            【解决方案7】:

            ShadowCache(用于渲染设计器)也存在与 VS2012 中的 XAML 不同步的问题。我刚刚发现了这一点,因为派生的用户控件出现了以下错误,我度过了一段可怕的时光:

            本地属性 XXXX 只能应用于派生自 YYYYY 的类型。

            影子缓存位于您的用户配置文件目录中:

            应用数据\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache

            您可以删除其中的所有内容并重新启动 VS2012。在那之后,事情变得更好了(至少有一段时间!)

            【讨论】:

            • 我遇到了同样的问题,设计师坚持认为我的 DataTemplate 资源在 Windows Phone 页面中是无效的 xaml。我尝试了一切,但清除 ShadowCache 终于成功了。这将为我节省很多时间和挫败感。太感谢了!不确定这是否有任何副作用,但如果您能告诉 Visual Studio 在其关闭时清除 ShadowCache,那就太好了。
            • 对于直接滚动到最高投票答案的人,请参阅下面的 Gooey Developer 的答案。将目标平台从 x64 更改为 Any CPU 对我有用。
            【解决方案8】:

            在 Visual Studio 2013 中,这是我用于我的 Windows Phone 项目的解决方法,http://danielhindrikes.se/visual-studio/workaround-for-invalid-markup-problems-when-developing-for-windows-phone/。我猜它与您为 WPF 编写 XAML 时使用的设计器相同。

            已尝试删除 Shadow Cache,但它只是在我第一次启动 Visual Studio 时工作,上面的解决方法是唯一对我有帮助的方法。

            【讨论】:

              【解决方案9】:

              删除 ShadowCache

              中的所有内容

              C:\Users\用户名\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\

              复制粘贴路径

              只需将这些路径之一复制/粘贴到 Windows 资源管理器中即可。 %LOCALAPPDATA% 是一个Windows Environment Variable,当进入 Explorer 时,它将被替换为相应的值(也适用于 Command Prompt

              VS2012

              %LOCALAPPDATA%\Microsoft\VisualStudio\11.0\Designer\ShadowCache\

              VS2013

              %LOCALAPPDATA%\Microsoft\VisualStudio\12.0\Designer\ShadowCache\

              VS2015

              %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\Designer\ShadowCache\

              ASP.NET

              如果你开发 ASP.NET 也删除

              %LOCALAPPDATA%\Microsoft\WebsiteCache

              %LOCALAPPDATA%\Temp\VWDWebCache

              【讨论】:

              • “打开该文件夹的更好方法”...您在哪里指定该路径。你的回答让我感到困惑多于开悟。
              • 真的吗?!... 按 Windows 键加 E 打开计算机文件夹(以前称为“我的电脑”)。单击导航栏并将该 uri 粘贴到那里。 %LOCALAPPDATA% 将被正确的文件夹名称替换 - 用户名、操作系统和操作语言将被自动考虑在内。
              【解决方案10】:

              有点晚了,但要考虑其他事情:如果您的无参数构造函数正在做一些其他工作,例如获取不存在的数据,因为您在设计器中,请在构造函数的开头添加以下内容:

              if (DesignerProperties.GetIsInDesignMode(new System.Windows.DependencyObject())) return;
              // Do work.
              

              这是必要的,因为设计器确实执行了您的无参数构造函数,这可能会在设计模式下失败并给您无效的标记。

              而且,无论其他人怎么说,这都不是 VS 或 WPF XAML 解析器错误。我今天使用 VS 2015,.Net 4.5.2 遇到了这个问题。

              【讨论】:

                【解决方案11】:

                我对 VS 2015 和 2017 有同样的问题,但前提是我只为 x64 编译。 如果我将编译目标(项目属性 - 构建,在德语中称为 Plattformziel)临时更改为 x86,编译到项目并切换回 x64,这将有所帮助。

                也许这是对其他人的“解决方案”。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-05-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-01-15
                  • 2016-05-08
                  • 1970-01-01
                  • 2012-07-20
                  相关资源
                  最近更新 更多