Frage

Ich habe eine Konsolenanwendung geschrieben in C # /. NET, die ich von einem Skript (Nant) ausgeführt werden soll. Wenn eine Ausnahme in der Konsolenanwendung auftritt, würde Ich mag Nant fortsetzen, aber in Windows Vista gibt es ein Pop-up, die nach Lösungen suchen und fragen nach Debug-etc.

Ich mag das Popup vermeiden, mit „Programm funktioniert nicht mehr“, wenn eine Ausnahme in der Konsolenanwendung geschieht. Wie kann ich das von C # steuern /. NET?

(Eine ähnliche Frage befasst sich das Thema für die C-Sprache , aber ich würde eine Lösung für C # / mag. NET.)

(Zur Klarstellung: Ich mag die Ausnahme von Nant weitergegeben werden, aber ohne das Popup).

War es hilfreich?

Lösung

Der JIT-Debugger Popup tritt auf, wenn eine nicht behandelte Ausnahme ist. Das heißt, eine Ausnahme tunnelt den ganzen Weg bis zu dem Stapel der Wurzel jeder Thread in der Laufzeit.

Um dies zu vermeiden, können Sie behandeln die AppDomain.CurrentDomain.UnhandledException Ereignis und rufen Sie einfach Environment.Exit(1) anmutig zu beenden .

Damit werden alle Ausnahmen auf alle Threads in Ihrem AppDomain behandeln. Es sei denn, Sie tun etwas Besonderes, App wahrscheinlich nur eine AppDomain, setzt dies so in Ihrer public static void Main Methode sollte genügen:

AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
    Console.Error.WriteLine("Unhandled exception: " + args.ExceptionObject);
    Environment.Exit(1);
};

Sie sollten wahrscheinlich die NAnt Logger verwenden, um die Fehler in diesem Fall auch zu schreiben (die API für dieses offhand wenn auch nicht wieder zu verwenden.)

Sie können auch JIT-Debuggen deaktivieren an der Maschine. Ich würde dies nur empfehlen unter bestimmten Umständen, wie für einen dedizierten Buildserver.

Andere Tipps

Nur die Ausnahme abfangen und log / ignorieren es.

Das Popup erscheint aufgrund einer nicht behandelten Ausnahme. Um zu vermeiden, dass Sie sicher, dass Ihre Hauptmethode machen fängt alle Ausnahmen und sie in ein anderes nützliches Stück Informationen können Sie abholen. Nur die Ausnahme ignorieren wird nicht empfohlen.

erinnern

Btw, dass Ausnahmen pro Thema sind, so dass, wenn Ihre Anwendung laicht Gewinde oder verwendet Threadpool-Threads, müssen Sie einen Handler für diese auch.

Unter Windows Vista können Sie diesen Dialog für Ihre Programme deaktivieren.

Deaktivieren Sie die „Problemberichte und -lösungen bieten“. Sie finden es unter Systemsteuerung -> Problemberichte und -lösungen -> Einstellungen ändern -> Erweiterte Einstellungen -> Schalten Sie für meine Programme, Problemmeldung

In der Regel nur dies geschieht, wenn Ihre Anwendung keine Ausnahme behandeln. Wenn Sie Ihre ganze Konsolenanwendung in einem try / catch-Block wickeln, und nur einen Code nicht überschreiten zurück, dann werden Sie das vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top