Laden...

Warum bringt die Referenz auf System.Windows.Forms aus einem WPF mit .NET Core Projekt Fehler?

Erstellt von Wühlmaus vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.739 Views
W
Wühlmaus Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren
Warum bringt die Referenz auf System.Windows.Forms aus einem WPF mit .NET Core Projekt Fehler?

Hallo,

ich bin ganz neu hier. Habe mich so leidlich in C# (Konsole) reingewühlt und versuche mich nun seit kurzem an der WPF. Dazu ackere ich gerade das Buch zur WPF von Thomas Claudius Huber durch. Die vielen Codebeispiele dazu sind hilfreich, aber nun habe ich ein grundsätzliches Problem:

Immer wenn in einem Beispielprojekt (WPF App mit .NET Core) die Assemblyreferenz "using System.Windows.Forms;" auftaucht, wird der Fehlercode CS0234 ausgeworfen. Versuche laut Tutorials aus dem Netz, diese Referenz in Visual Studio 2019 Community manuell nachzutragen (Rechtsklick im Projektmappen-Explorer auf "Abhängigkeiten", COM-Verweis hinzufügen (System_Windows_Forms 2.4 oder 2.0) funktionieren nicht, im Projektmappen-Explorer erscheint dann zwar COM , aber mit einem gelben Warndreieck. Unter C:\Windows\Microsoft.NET\FrameWork\v4.0.3019 finde ich zwar eine System.Windows.Forms.dll, aber ob die integer ist, weiß ich natürlich nicht.

Es ist mir zwar schon gelungen, ein OpenFileDialog-Element aus Windows Forms in meine WPF-Spielwiese einzubauen, aber da wird das Assembly Microsoft.Win32 verwendet und nicht System.Windows.Forms. Aber jetzt, bei dem Versuch das Gleiche mit FolderBrowserDialog zu schaffen, stehe ich schon den ganzen Tag über voll auf dem Schlauch.

Was mache ich falsch? Bitte um Vergebung, wenn's ein idiotischer Anfängerfehler ist.

LG Christoph

16.842 Beiträge seit 2008
vor 3 Jahren

Du hast da vermutlich grundlegend was nicht verstanden.

Du kannst unter .NET Core keine Referenzen auf .NET Framework packen.
.NET Core und .NET Framework sind zwei unterschiedliche Runtimes.

Auch ist es so, dass Du in .NET Core keine Referenzen auf den Global Assembly Cache setzen kannst; den gibt es unter .NET Core nicht.
Den gibts nur in .NET Framework.
In .NET Core referenzierst Du via NuGet auf System Referenzen (übrigens mittlerweile geht das auch in .NET Framework).
Die Anleitung Projektmappen-Explorer auf "Abhängigkeiten" bringt Dir bei .NET Core nichts.

Im Fall von WPF mit WinForms auf .NET Core funkioniert das aber anders:
Damit Du in WPF mit .NET Core auf WinForms zugreifen kannst, musst Du im Project File WinForms aktivieren.

<UseWindowsForms>true</UseWindowsForms>

Nach einem Rebuild sollten Dir dann die Namespaces zur Verfügung stehen.

Die Erklärung dazu steht in den Docs.

PS: Korrigier mich, aber soweit ich weiß hat TCH kein Buch für WPF unter .NET Core, sondern unter .NET Framework.
Daher hilft Dir das auf Code-Ebene nur bedingt.

W
Wühlmaus Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Hallo Abt,

vielen Dank für deine prompte Rückmeldung und Hilfestellung.

PS: Korrigier mich, aber soweit ich weiß hat TCH kein Buch für WPF unter .NET Core, sondern unter .NET Framework.
Daher hilft Dir das auf Code-Ebene nur bedingt.

Ich denke, wenigstens da hatte ich ausnahmsweise mal Recht. Ich beziehe mich auf die 5. Auflage von Hubers "Windows Presentation Foundation - das umfassende Handbuch" von 2019. Da heißt es auf S. 37:

Die Beispiele wurden mit .NET Core 3.0 entwickelt.

Wohl auch deshalb war es dieser Tipp von dir, der mir letztendlich weitergeholfen hat:

Damit Du in WPF mit .NET Core auf WinForms zugreifen kannst, musst Du im Project File WinForms aktivieren.

<UseWindowsForms>true</UseWindowsForms>  

Vielen Dank, damit läuft's jetzt. 👍

Danke auch für den Link auf die MSDN-Docs. Dort habe ich den halben Nachmittag rumgesurft, aber auf diesen Link bin ich nicht gestoßen. Wohl weil ich immer nach der Einbindung des Winforms-Elements FolderBrowserDialog in WPF gesucht habe und nicht nach der "Portierung von WinForms-Projekten".

LG Christoph

16.842 Beiträge seit 2008
vor 3 Jahren

Kannst ihm ja auf Twitter Feedback geben 😉

W
Wühlmaus Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Das traue ich mich erst, wenn ich sein "überschaubares" Büchlein auswendig drauf habe, also in ca. 10 Jahren. 😁

LG Christoph