你如何调试XamlParseException?

时间:2010-05-21 02:58:18

标签: silverlight xaml

我正在尝试在Silverlight应用程序中使用第三方组件,当我尝试创建控件实例时,我得到一个XamlParseException:

{System.Windows.Markup.XamlParseException: **Set property 'System.Windows.FrameworkElement.Style' threw an exception.** [Line: 0 Position: 0] 
---> System.Windows.Markup.XamlParseException: **Elements in the same ResourceDictionary cannot have the same x:Key** [Line: 1739 Position: 47]    
at MS.Internal.XcpImports.CreateFromXaml(UnmanagedMemoryStream stream, String sourceAssemblyName, boolean createNamescope, Boolean requireDefaultNamespace, Boolean allowEventHandlers)    
at System.Windows.Controls.Control.GetBuiltInStyle(IntPtr nativeTarget, IntPtr& nativeStyle)    
--- End of inner exception stack trace ---    
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)    
at SpellCheckerSample.StandardSpellDialog.InitializeComponent()    
at SpellCheckerSample.StandardSpellDialog..ctor()}

我该如何调试?我怎么知道位置47所在的文件行1739是什么?

5 个答案:

答案 0 :(得分:7)

可能有点像臭虫找到。基本上尝试从调试器中收集尽可能多的细节。

  1. 将调试器设置为中断XamlParseException
  2. 看看callstack。有问题的控件的构造函数可能在callstack上。
  3. 暂停时,请转到Locals调试窗口,查看该函数的任何参数是否显示了更多关于这个组件的信息。
  4. 如果没有双击下一个堆栈条目,请转到步骤3.
  5. 重复步骤3和4.
  6. 在我写完之后,我意识到控件的构造函数确实在callstack上,它是SpellCheckerSample。很可能是该控件的.XAML页面。如果您可以访问源代码,则文件名很可能类似于 SpellCheckerSample.xaml

    错误本身非常简单,看起来在同一个ResourceDictionary中使用相同的键定义了多个内容。以下代码将导致这种情况发生:

    <Window.Resources>
      <myConverters:BananaToCarrotConverter x:Key="StupidestConverterEver" />
      <myConverters:BananaToAppleConverter x:Key="StupidestConverterEver" />
    <Window.Resources>
    

答案 1 :(得分:2)

原来我的具体问题是ComponentOne组件只能在Silverlight 4下工作。一旦我改为目标SL4,它就全部工作了。

答案 2 :(得分:0)

检查你得到的ResourceDictionary引用 - 问题通常是其中一个得到了一个需要修复的错误。

如果您的异常是由App引起的,那么它可能是您在那里合并的目录之一,否则是相关控件。

同时检查您是否缺少样式的资源目录使用情况(如果您收到ReSharper,则会有帮助,因为您会在XAML设计时收到警告)。

enter image description here

答案 3 :(得分:0)

  1. 将调试器设置为中断XamlParseException (调试 - &gt;例外 - &gt;公共语言运行时除外 - &gt; System.Windows.Markup - &gt; XamlParseException行 - &gt;在投掷列中设置刻度线)
  2. 查看调试器中的异常(特别是InnerExceptionLineNumber属性)
  3. 尝试逐行浏览callstack。选择一行时,请查看“本地”窗口。它甚至可以在框架代码中显示一些可能有用的变量。
  4. 尝试删除XAML的某些部分,看看是否再次发生异常。这将帮助您找到导致问题的代码。

答案 4 :(得分:-1)

尝试运行应用时,您应该会在.cs文件中看到错误。 并且具有给定行号和列的此.cs文件的相应.xaml文件是正确的。