Heim >Backend-Entwicklung >C++ >Wie implementiert man einen globalen Ausnahmehandler in .NET-Konsolenanwendungen?
Globale Ausnahmebehandlung in .NET-Konsolenanwendungen
Konsolenanwendungen benötigen außerdem einen Mechanismus zur Behandlung nicht behandelter Ausnahmen. Während ASP.NET-Anwendungen global.asax und Windows-Anwendungen/Dienste den UnhandledException-Ereignishandler in der AppDomain verwenden können, verfolgen Konsolenanwendungen einen etwas anderen Ansatz.
Lösung für Konsolenanwendung
In .NET besteht die korrekte Methode zum Definieren eines globalen Ausnahmehandlers für eine Konsolenanwendung darin, das UnhandledException-Ereignis der AppDomain-Klasse zu verwenden:
<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += MyExceptionHandler;</code>
Dies funktioniert wie erwartet in .NET 2.0 und höher.
Anleitung für VB.NET-Entwickler
In VB.NET muss das Schlüsselwort „AddHandler“ vor currentDomain verwendet werden, andernfalls wird das UnhandledException-Ereignis in IntelliSense nicht angezeigt. Der Unterschied in der Syntax ergibt sich aus der Art und Weise, wie VB.NET und C# mit der Ereignisbehandlung umgehen.
Beispiel
Hier ist ein Beispiel für die globale Ausnahmebehandlung in einer Konsolenanwendung mit C#:
<code class="language-csharp">using System; class Program { static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; throw new Exception("发生异常"); } static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(e.ExceptionObject.ToString()); Console.WriteLine("按 Enter 键继续"); Console.ReadLine(); Environment.Exit(1); } }</code>
Einschränkungen
Es ist wichtig zu beachten, dass dieser Ansatz keine Typ- und Dateiladeausnahmen abfangen kann, die vom JIT-Compiler generiert werden, bevor die Main()-Methode ausgeführt wird. Um diese Ausnahmen abzufangen, müssen Sie den JIT-Compiler zurückstellen und den riskanten Code in eine separate Methode verschieben und das Attribut [MethodImpl(MethodImplOptions.NoInlining)] anwenden.
Das obige ist der detaillierte Inhalt vonWie implementiert man einen globalen Ausnahmehandler in .NET-Konsolenanwendungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!