Я знаю, что не могу обработать это исключение и не должен; вот почему это приводит к сбою приложения. Я могу проверить журнал в средстве просмотра событий. Я тоже не хочу обрабатывать это исключение; Я просто хочу поймать это, чтобы можно было написать журнал, а затем позволить приложению умереть любым способом. Так что сбой приложения здесь не моя проблема. Мне нужно написать журнал до сбоя, чтобы мне не нужно было заходить в средство просмотра событий, чтобы проверить, что пошло не так.
Я нашел полезными следующие вопросы:
Как обрабатывать AccessViolationException
Надежная обработка исключений поврежденного состояния в .NET Core
Как перехватить AccessViolationException в .net core 2.0
Есть и другие несколько вопросов по переполнению стека, в которых говорится об этой проблеме; но все они относятся к старой .NET Framework.
В более старых версиях .NET Framework в app.config можно было установить параметр:
Код: Выделить всё
Существует также атрибут [HandleProcessCorruptedStateExceptions], который устарел в .NET 8. Я все еще пробовал его, и он не работает; приложение по-прежнему вылетает; ниже приведен код:
Код: Выделить всё
[HandleProcessCorruptedStateExceptions]
private bool MethodThatThrowsException(string filePath)
{
...
...
}
Способ использования переменной среды COMPlus_legacyCorruptedStateExceptionsPolicy, описанный в одном из вопросов, также не работает. Добавление следующего кода при запуске моего приложения по-прежнему приводит к сбою приложения:
Код: Выделить всё
static class Program
{
[STAThread]
static void Main(string[] args)
{
Environment.SetEnvironmentVariable("COMPlus_legacyCorruptedStateExceptionsPolicy", "1");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
Подробнее здесь: https://stackoverflow.com/questions/799 ... n-in-net-8
Мобильная версия