2017-02-04 5 views
5

Ich portiere auf .NET-Core und die vorhandene App hat den Win32-Aufruf SetConsoleCtrlHandler eingehängt, um Anwendung schließen schließen, so dass es offene Datenbankdateien und andere ordnungsgemäße Herunterfahren Aufgaben sauber schließen kann.Dotnet Core-Capture Shutdown für anmutig schließen

Ich muss das gleiche in .NET-Kern tun, und die einzige Option, die ich sehen kann, ist mit ASP.NET durch Einbinden in IApplicationLifetime ApplicationStopping.Register. Dies erfasst jedoch nur Strg-C und funktioniert nicht, wenn der Endbenutzer oder das System die Konsolenanwendung beendet (z. B. Systemneustart), die der Win32-Aufruf ausführen wird.

Die andere Option ist über AppDomain (AppDomain.CurrentDomain.ProcessExit) aber AppDomain ist in Dotnet Core nicht verfügbar.

Ordentliche App Herunterfahren ist wichtig, und ich bin besorgt über Datenbeschädigung im Produktionssystem müssen so etwas Äquivalentes implementieren, und die neue Anwendung wird auf einer Mischung von Windows und Linux OS ausgeführt werden.

Habe ich eine Funktion in Dotnet-Kern verpasst, dies zu tun? Oder muss ich den Win32 Shutdown-Hook und was ist das Äquivalent unter Linux neu implementieren?

+0

Wer hat irgendwelche Ideen, wie man das am besten angeht? – deandob

Antwort

2

Das Ereignis AppDomain.CurrentDomain.ProcessExit ist jetzt in .NET Core 2.0 verfügbar, und ich kann bestätigen, dass es unter Linux funktioniert. Vor .NET Core 2.0 ist AssemblyLoadContext.Default.Unloading wahrscheinlich eine funktionierende Alternative.

+1

Aber denken Sie daran, dass das die Idee ist, aber es gibt auch [einige Probleme] (https://github.com/dotnet/coreclr/issues/8565) - lohnt es, ein Auge auf diese zu haben – quetzalcoatl