Konsolenfenster und Windows-Fenster in einer .NET-5.0-App

Um Windows Forms oder Windows Presentation Foundation (WPF) in einer Konsolenanwendung nutzen zu können, ist eine spezielle Einstellung notwendig.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 2 Min.
Von
  • Dr. Holger Schwichtenberg

Um Windows Forms oder Windows Presentation Foundation (WPF) in einer Konsolenanwendung nutzen zu können, ist eine spezielle Einstellung notwendig.

Gemäß Semantic Versioning hat Microsoft auch zwischen .NET Core 3.1 (Dezember 2019) und dem direkten Nachfolger .NET 5.0 (ohne "Core", erschienen im November 2020) einige Breaking Changes eingebaut, denn die Hauptversionsnummer hat sich damit geändert.

Auf einen Breaking Change bin ich heute bei der Umstellung einer Kundenanwendung gestoßen: Wir haben eine Konsolenanwendung implementiert, die im Regelfall unbeaufsichtigt läuft, unter bestimmten Umständen (Konfiguration und Diagnose) aber auch Windows-Fenster mit Windows Forms und/oder Windows Presentation Foundation öffnen kann.

Allerdings ist ein Konsolenfenster und Windows-Fenster in einer .NET-5.0-App im Standard nicht mehr möglich. In .NET Core 3.1 hat man diese Projekteinstellungen verwendet:

<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>

Die Anwendung startete als Konsolenanwendung und konnte jederzeit Fenster mit Windows Forms und/oder Windows Presentation Foundation öffnen.

In .NET 5.0 funktioniert <UseWindowsForms> und <UseWPF> aber nur noch, wenn

<TargetFramework>net5.0-windows</TargetFramework>

gesetzt ist. Der Zusatz "-windows" führt aber auch dazu, dass die Anwendung beim Start gar kein Konsolenfenster mehr zeigt.

Die Lösung ist, zusätzlich die neue Option DisableWinExeOutputInference zu verwenden:

<DisableWinExeOutputInference>true</DisableWinExeOutputInference>

Mit

<TargetFramework>net5.0-windows</TargetFramework>  
<UseWindowsForms>true</UseWindowsForms>
<UseWPF>true</UseWPF>
<DisableWinExeOutputInference>true</DisableWinExeOutputInference>

bekommt man dann unter .NET 5.0 dann wieder ein Konsolenfenster und optionale Windows-Fenster. ()