2010-05-21 59 views
14

我想在我的Silverlight應用程序使用一個第三方組件,當我嘗試創建控件的實例,我得到一個XamlParseException:如何調試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()} 

如何調試呢?我如何知道1739號文件的位置?

回答

2

原來我的具體問題是,ComponentOne的組件只的Silverlight 4下工作。一旦我改變了對目標SL4它的所有工作。

+0

多麼奇怪的錯誤報告雖然 – 2010-05-21 04:07:47

+1

是的,並且浪費大量時間!感謝您的建議。 – 2010-05-21 06:17:46

7

可能有點找不到。基本上儘量從調試器收集儘可能多的細節。

  1. 將調試器設置爲打破XamlParseException
  2. 看看這個callstack。冒犯控件的構造函數可能位於callstack上。
  3. 當暫停時,轉到本地調試窗口,查看該函數的任何參數是否更多地顯示這是哪個組件。
  4. 如果不下來雙擊一個堆棧條目並轉到步驟3
  5. 3和4

我寫了這個之後,我意識到控制的構造上確實調用堆棧重複步驟和它是SpellCheckerSample。很可能它是該控件的.XAML頁面。如果您可以訪問源文件,則文件名最有可能類似於SpellCheckerSample.xaml

錯誤本身非常簡單,看起來像在同一個ResourceDictionary中使用同一個鍵定義的多個東西。下面的代碼會導致這種情況發生:

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

是的,我同意。如果你能看到導致問題的關鍵是否會很好。我非常感謝你的幫助,但是它並沒有帶給我任何有用的東西:( – 2010-05-21 03:23:31

+0

你有這個庫的來源嗎?如果你有正確的文件,Line:1739 Position:47會讓你的資源導致 – 2010-05-21 03:29:31

+0

其實它是ComponentOne Silverlight的SpellChecker組件,我剛剛把我的應用程序破解了 - 刪除了我的App.xaml文件中的所有資源,但仍然失敗,但是我有一個來自ComponentOne的示例應用程序,它工作正常。非常奇怪,但是,我會繼續黑客直到我找到它! – 2010-05-21 03:34:49

-1

嘗試運行應用程序時,您應該在.cs文件中看到錯誤。 對於這個帶給定行號和列的.cs文件的相應.xaml文件是正確的。

0

檢查你得到了什麼ResourceDictionary引用 - 這個標誌通常是其中一個有一個需要修復的錯誤。

如果你的異常是從應用程序中產生的,那麼它可能是你的合併目錄之一,否則就是有問題的控件。

此外,請檢查您是否不缺少樣式的資源目錄使用情況(如果因爲在XAML設計時會收到警告而獲得了ReSharper,那麼可以幫助它)。

enter image description here

0
  1. 將調試器與XamlParseException打破(調試 - >例外 - >通用語言運行時Exceptins - > System.Windows.Markup - > XamlParseException線 - >拋出列設置打勾)
  2. 看看調試器中的異常(尤其是在InnerExceptionLineNumber屬性上)
  3. 嘗試逐行瀏覽一個callstack。在選擇一條線看當地人的窗口。它甚至可以在框架代碼中顯示一些變量,這可能會有所幫助。
  4. 嘗試刪除XAML的某些部分並查看是否有異常再次發生。這將幫助您找到導致問題的代碼。