2010-05-21 34 views
14

Tôi đang cố gắng sử dụng một thành phần bên thứ 3 trong ứng dụng Silverlight của tôi và khi tôi cố gắng tạo ra một thể hiện của sự kiểm soát, tôi nhận được một XamlParseException:Bạn gỡ lỗi XamlParseException như thế nào?

{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()} 

Làm thế nào tôi có thể gỡ lỗi này? Làm cách nào để biết dòng tệp 1739, vị trí 47 là gì?

Trả lời

2

Hóa ra vấn đề cụ thể của tôi là các thành phần ComponentOne chỉ hoạt động dưới Silverlight 4. Khi tôi đã thay đổi để nhắm mục tiêu SL4 tất cả làm việc.

+0

Thật là một lỗi lạ khi báo cáo mặc dù –

+1

Có, và một sự lãng phí thời gian! –

7

Có thể là một chút của một bugger để tìm. Về cơ bản cố gắng thu thập càng nhiều chi tiết càng tốt từ trình gỡ lỗi.

  1. Đặt trình gỡ lỗi để ngắt trên XamlParseException.
  2. Hãy nhìn vào callstack. Có thể là nhà xây dựng của kiểm soát vi phạm đang ở trên callstack.
  3. Khi bị tạm dừng, hãy truy cập cửa sổ gỡ lỗi Người dân địa phương để xem liệu có bất kỳ tham số nào cho hàm này tiết lộ thêm về thành phần nào không.
  4. Nếu không được kích đúp vào entry ngăn xếp tiếp theo xuống và đi đến bước 3.
  5. Lặp lại các bước 3 và 4.

Sau khi tôi viết bài này tôi nhận ra rằng constructor của kiểm soát thực sự là trên callstack và nó là SpellCheckerSample. Rất có thể đó là trang .XAML cho điều khiển đó. Nếu bạn có thể truy cập vào nguồn, tên tệp có nhiều khả năng giống như SpellCheckerSample.xaml.

Lỗi chính nó là khá thẳng về phía trước, có vẻ như có nhiều thứ được xác định bằng cùng một khóa trong cùng một ResourceDictionary. Mã dưới đây sẽ gây ra điều này xảy ra:

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

Vâng, tôi đồng ý. Sẽ được tốt đẹp nếu bạn có thể thấy những gì chính nó đã gây ra vấn đề. Tôi đánh giá cao sự giúp đỡ của bạn, nhưng nó đã không dẫn tôi bất cứ nơi nào hữu ích nào được nêu ra: ( –

+0

Bạn có nguồn cho thư viện này? Nếu bạn có đúng tập tin, Line: 1739 Chức vụ: 47 sẽ đưa bạn đến tài nguyên gây ra –

+0

Thực ra nó là thành phần ComponentOne Silverlight SpellChecker.Tôi vừa mới hack ứng dụng của mình thành nhiều phần - xóa tất cả các tài nguyên trong tệp App.xaml của tôi, và vẫn không thành công.Tuy nhiên, tôi có một ứng dụng mẫu từ ComponentOne hoạt động tốt. Tuy nhiên, tôi sẽ tiếp tục hacking cho đến khi tôi tìm thấy nó! –

-1

Bạn sẽ thấy lỗi trong tệp .cs khi cố gắng chạy ứng dụng. Và tệp .xaml tương ứng cho tệp .cs này với số dòng và cột đã cho là đúng.

0

Kiểm tra tham chiếu ResourceDictionary nào bạn có - lệnh thường là một trong số chúng có lỗi cần được sửa.

Nếu ngoại lệ của bạn là nguyên nhân từ ứng dụng, đó có thể là một trong các thư mục được hợp nhất của bạn ở đó, nếu không thì kiểm soát được đề cập.

Ngoài ra, hãy kiểm tra xem bạn không thiếu sử dụng thư mục tài nguyên cho các kiểu (giúp bạn có được ReSharper vì bạn sẽ nhận được cảnh báo trong thời gian thiết kế XAML) hay không.

enter image description here

0
  1. Đặt debugger để phá vỡ trên XamlParseException (Debug -> Exceptions -> Common Language Runtime Exceptins -> System.Windows.Markup -> XamlParseException dòng -> thiết lập đánh dấu trong cột Thrown)
  2. Hãy xem ngoại lệ trong trình gỡ lỗi (đặc biệt là trên InnerExceptionLineNumber thuộc tính)
  3. Cố gắng đi qua đường dây gọi từng dòng. Trong khi chọn một dòng, hãy nhìn vào cửa sổ Người dân địa phương.Nó cho thấy một số biến ngay cả trong mã khung có thể hữu ích.
  4. Cố gắng xóa một số phần của XAML và xem liệu ngoại lệ có xảy ra lần nữa hay không. Điều này sẽ giúp bạn xác định vị trí mã gây ra sự cố.
Các vấn đề liên quan