Я полурегулярно сталкиваюсь со следующей проблемой: Я делаю изменения в XAML или некоторые ресурсы используемыми им и когда я иду для загрузки проекта Silverlight в режиме отладки, это только добирается до вращающейся загружающей Silverlight анимации.
Я попытался присоединить отладчик VS08 к процессу, но он ничего не делает в этой точке (хорошо работает, после того как я нахожусь в Silverlight, но не прежде.)
От предыдущего опыта я заметил, что это происходит, когда существуют проблемы с XAML или ресурсами в нем, но мое единственное решение до сих пор состояло в том, чтобы разделить код линию за линией, пока я не определяю проблему.
Существует ли простой способ отладить/диагностировать эти ситуации?
Я нашел этот вопрос с некоторой справкой, но это все еще не обеспечивает хороший способ отладить эти типы проблем.
Это была настоящая проблема для отладки, но я наконец обнаружил проблему, скрытую глубоко в конструкторе одного из наших настраиваемых элементов управления (который искал ресурс этого не было.) Настоящая проблема не в том, чтобы решить проблему, а в ее поиске.
Я обнаружил, что IE реагирует на исключения, передаваемые из Silverlight в DOM, но вы не получаете такой же обратной связи в браузере Chrome (который я использую). Решение, которое действительно очень помогает (даже больше, чем совет IE) заключается в изменении метода ReportErrorToDOM () в App.xaml.cs на следующее:
private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
{
string errorMsg = String.Empty;
try
{
errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");
System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
}
catch (Exception)
{
#if DEBUG
MessageBox.Show(errorMsg);
#endif
}
}
Это дает вам позицию в XAML, где возникает проблема. Это не идеальный отладчик, но он помогает.
Для Microsoft: конечный пользователь в настоящее время не может отлаживать синтаксический анализатор XAML, это может делать только MS. Новая версия Silverlight 4 XAML Parser была полностью переписана с использованием управляемого кода, и мы надеемся, что они дадут нам лучший способ его отладки. Я знаю это, так как у меня только что возникла проблема, и я обратился в службу поддержки, и мне об этом сообщил разработчик Silverlight.
Самое интересное, что я мог когда-либо увидеть, что происходило с парсером, было использование Silverlight Spy:
http://firstfloorsoftware.com/silverlightspy/download-silverlight-spy/
Отличный инструмент.
Это может быть неприменимо, но одним из частых источников ошибок XAML являются не пойманные исключения в конвертерах, которые вы используете в качестве ресурсов. Люди часто забывают использовать блок try-catch в своих конвертерах, и когда там что-то взрывается, в итоге приходится разбирать код построчно.
И, конечно, примите это за чистую монету, но в зависимости от ситуации, вы можете скопировать и вставить часть вашего XAML в проект WPF и получить лучшие сообщения об ошибках. Я сам никогда не пользовался этой тактикой, но недавно услышал о ней от опытного разработчика WPF/SL, который намного умнее меня, так что, возможно, стоит попробовать :-)
.Это не окончательный ответ, но часто может помочь
В Visual Studio:
XAML
Запустите проект в режиме отладки. Любые исключения Xaml будут отображаться немедленно. Для получения дополнительной информации иногда проверяйте внутреннее исключение.
Я потратил очень много времени, прежде чем наконец понял это!