2012-06-20 4 views
38

Я получаю такую ​​проблему в отладчике, и программа прекращает выполнение. Отладчик не показывает мне строку, поэтому я не знаю, что исправить.Как исправить «System.AggregateException» произошел в mscorlib.dll «

Необработанное исключение «System.AggregateException» типа произошло в mscorlib.dll

Дополнительная информация: Исключение (ы) задача не наблюдалось ни при ожидании на задачи или доступ к его свойству Exception , Как результат , незаметное исключение было восстановлено потоком финализатора.

Невозможно получить значение local или argument '', так как оно не является , доступным при указании этой инструкции, возможно, потому, что оно было оптимизировано. System.Threading.Tasks.TaskExceptionHolder

Как устранить проблему?

Я также нашел этот вопрос, который очень похож Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away

+0

Я как-то вызвал эту проблему, когда в ходе отладочного запуска было прервано предыдущее консольное приложение без проблем. Закрытие Visual Studio, а затем повторное открытие, устранило проблему, и тогда она прошла нормально - это не поможет во всех случаях, но стоит попробовать, если приложение «должно» работать нормально. –

ответ

42

Как говорится в сообщении, у вас есть задача, которая бросила необработанное исключение.

Включите перерыв во всех исключениях (отладка, исключения) и запустите программу.
Это покажет вам исходное исключение, когда оно было брошено в первую очередь.


(комментарий прилагается): В VS2015 (или выше). Выберите Отладка> Параметры> Отладка> Общие и снимите флажок «Включить только мой код».

+2

Где эта настройка? Отладка> Исключения> ...? – mdupls

+3

@mdupls: Перерыв во всех исключениях CLR. – SLaks

+1

просто проверьте их все. Затем используйте «Сбросить все», чтобы вернуться к значениям по умолчанию. –

9

Вы можете обрабатывать исключение напрямую, чтобы оно не разбивало вашу программу (ловя AggregateException). Вы также можете посмотреть на внутреннее исключение, это даст вам более подробное объяснение того, что пошло не так:

try { 
    // your code 
} catch (AggregateException e) { 

} 
+2

Но как решить проблему определенно? –

+0

Как правило, вы хотели бы, чтобы приложение разбилось, если что-то пошло не так. Обращайтесь к источнику проблем вместо того, чтобы ловить все исключения. –

4

Принятая ответ будет работать, если вы можете легко воспроизвести проблему. Однако в качестве наилучшей практики вы должны поймать любые исключения (и протоколирование), которые выполняются в рамках задачи. В противном случае ваше приложение выйдет из строя, если в задаче произойдет что-то неожиданное.

Task.Factory.StartNew(x=> 
    throw new Exception("I didn't account for this"); 
) 

Однако, если мы это сделаем, по крайней мере, приложение не сработает.

Task.Factory.StartNew(x=> 
    try { 
     throw new Exception("I didn't account for this"); 
    } 
    catch(Exception ex) { 
     //Log ex 
    } 
) 
0

В моем случае я побежал на эту проблему, используя Edge.js - все проблема была ошибка синтаксиса JavaScript внутри определения функции C# Edge.js.

 Смежные вопросы

  • Нет связанных вопросов^_^