Как вы отлаживаете исключение XamlParseException? - PullRequest
14 голосов
/ 21 мая 2010

Я пытаюсь использовать сторонний компонент в своем приложении 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()}

Как я могу отладить это? Как узнать, в какой строке файла 1739 находится позиция 47?

Ответы [ 5 ]

7 голосов
/ 21 мая 2010

Может быть что-то вроде гадости, чтобы найти. Обычно старайтесь собрать как можно больше деталей в отладчике.

  1. Установить отладчик для работы на XamlParseException.
  2. Посмотрите на стек вызовов. Возможно, конструктор нарушающего элемента управления находится в стеке вызовов.
  3. Когда пауза, перейдите в окно отладки Locals, чтобы увидеть, показывают ли какие-либо параметры функции больше о том, какой это компонент.
  4. Если нет, дважды щелкните следующую запись в стеке и перейдите к шагу 3.
  5. Повторите шаги 3 и 4.

После того, как я написал это, я понял, что конструктор элемента управления действительно находится в стеке вызовов и это SpellCheckerSample. Очень вероятно, что это страница .XAML для этого элемента управления. Если вы можете получить доступ к источнику, имя файла, скорее всего, будет примерно таким: SpellCheckerSample.xaml .

Сама ошибка довольно прямолинейна, похоже, что в одном и том же ключе ResourceDictionary определены несколько вещей с одним и тем же ключом. Приведенный ниже код вызовет это:

<Window.Resources>
  <myConverters:BananaToCarrotConverter x:Key="StupidestConverterEver" />
  <myConverters:BananaToAppleConverter x:Key="StupidestConverterEver" />
<Window.Resources>
2 голосов
/ 21 мая 2010

Оказывается, моя конкретная проблема заключалась в том, что компонент ComponentOne работает только в Silverlight 4. После перехода на целевой SL4 все заработало.

0 голосов
/ 29 августа 2014
  1. Установить прерывание отладчика на XamlParseException (Отладка -> Исключения -> Исключения времени выполнения общего языка -> System.Windows.Markup -> Строка XamlParseException -> установить галочку в столбце Брошенный)
  2. Обратите внимание на исключение в отладчике (особенно для свойств InnerException и LineNumber)
  3. Попытайтесь пройти через стек вызовов за строкой. При выборе строки посмотрите на окно Locals. Он показывает некоторые переменные даже в коде Framework, что может быть полезно.
  4. Попробуйте удалить некоторую часть XAML и посмотрите, не произойдет ли исключение снова. Это поможет вам найти код, вызывающий проблемы.
0 голосов
/ 19 февраля 2014

Проверьте, какие ссылки ResourceDictionary вы получили - проблема, как правило, в том, что один из них получил ошибку, которую необходимо исправить.

Если ваше исключение является причиной из App, возможно, это одна из ваших объединенных директорий, в противном случае рассматриваемый элемент управления.

Также убедитесь, что вы не пропускаете использование директории ресурсов для стилей (помогает, если вы получили ReSharper, так как вы получите предупреждение во время разработки XAML).

enter image description here

0 голосов
/ 18 июля 2011

Вы должны увидеть ошибку в файле .cs при попытке запустить приложение. И соответствующий файл .xaml для этого файла .cs с заданным номером строки и столбцом является правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...