#silverlight #silverlight-4.0 #.net-4.0 #error-handling
#silverlight #silverlight-4.0 #.net-4.0 #обработка ошибок
Вопрос:
Недавно я столкнулся со странной вещью. На некоторых серверах моей компании при распечатке сообщения об исключении (да, плохое, я знаю. Это для отладки), фактическое сообщение не отображается. Вместо этого он отображает ключ для внешнего строкового ресурса и сообщает, что «Строки ресурсов отладки недоступны»
После некоторых исследований я пришел к следующему: в режиме выпуска Silverlight не упаковывает xap с библиотеками DLL, содержащими фактические сообщения об ошибках, в целях экономии места.
Я нашел обходные пути для СТАРЫХ версий, но ничего для 4. Похоже, что существуют версии для разработчиков среды выполнения SL 2 и 3, которые будут автоматически устранять ошибки, но я не могу найти ни одной для SL 4.
Итак, мой вопрос заключается в следующем:
Что, черт возьми, мне нужно сделать с моим приложением / компьютером SL 4, чтобы я мог видеть полные, подробные ошибки, когда он находится в режиме выпуска?
Комментарии:
1. Отличный вопрос, я только что принял это в прошлом, но это было бы здорово для улучшения отчетов о сбоях.
2. Другая досадная вещь заключается в том, что у MS есть неясный подраздел их веб-сайта SL, который может предоставить подробную информацию об этих ошибках, но, похоже, в нем нет их всех.
3. Среду выполнения разработчика можно найти на Silverlight.net страница «Начало работы».
Ответ №1:
Вы можете загрузить среду выполнения разработчика (которая содержит полные строки исключений) со страницы GetStarted — http://www.silverlight.net/getstarted / — найдите «Среды выполнения разработчика для Windows и OSX», это в нижней части страницы.
Ответ №2:
Хотя отвечать уже слишком поздно, это может помочь кому-то еще. У нас есть веб-приложение, использующее Silverlight 4, установленное в различных тестовых средах. Это веб-приложение использует более одной службы WCF. Все сайты тестовой среды, кроме одного, постоянно завершались сбоем с сообщением «Строки ресурсов для отладки недоступны». К счастью, реальное исключение было проглочено. Поскольку это приложение Silverlight, не велось протоколирование, и всегда казалось, что в компоненте Silverlight что-то не работает. Я подключил приложение в моей среде разработки к этой конкретной тестовой среде и обнаружил, что проблема на самом деле заключалась в одной из служб WCF. Я исправил проблему на стороне службы, и у компонента SL перестала возникать эта проблема.
Почему произошел сбой WCF?
Служба WCF содержала следующий код в конструкторе:
public MyService()
{
//Create an instance of Data Lookup service asycnchronously.
if (_dataLookupSrvc == null)
{
try
{
System.Threading.Tasks.Task.Factory.StartNew(() => _dataLookupSrvc = new LookupDataService.LookupDataService());
}
catch (Exception ex)
{
_log.Error<Exception>(ex);
}
}
}
Кто-то переместил базовый LookupDataService.dll из служебной папки вызывает сбой конструктора, но не сразу. Поскольку экземпляр LookupDataService был создан анонимным методом, регистрация исключений в этом методе никогда не выполнялась. Как только LookupDataService.библиотека dll была удалена из служебной папки, сообщение «Строки ресурсов отладки недоступны» исчезло.
Это была забавная погоня за несбыточным!
Ответ №3:
Вы уже проверили средство просмотра событий на компьютере, где произошел сбой приложения? Пуск-> Выполнить. eventvwr