Я знаю, что не могу обработать это исключение и не должен; вот почему это приводит к сбою приложения. Я могу проверить журнал в средстве просмотра событий. Я тоже не хочу обрабатывать это исключение; Я просто хочу поймать это, чтобы можно было написать журнал, а затем позволить приложению умереть любым способом. Так что сбой приложения здесь не моя проблема. Мне нужно написать журнал до сбоя, чтобы мне не нужно было заходить в средство просмотра событий, чтобы проверить, что пошло не так.
Я нашел полезными следующие вопросы:
Как обрабатывать 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://github.com/dotnet/runtime/issue ... -554933927
https://github.com/dotnet/runtime/issue ... -555048590
Таким образом, единственный оставшийся вариант — LegacyCorruptedStateExceptionsPolicy. Я хочу использовать это в своем приложении, ориентированном на .NET 8. Как и где я могу установить этот параметр в .NET 8? В .NET 8 нет файла app.config. Подходит ли .runtimeconfig.json? И все же, как это там настроить?
Подробнее здесь: https://stackoverflow.com/questions/799 ... e-applicat
Мобильная версия