Ist es möglich, eine Desktop-GUI-Anwendung in .NET Core zu erstellen?

100

Ich entwickle seit einigen Jahren WinForms-Programme. Ich beschäftige mich jetzt mit .NET Core (einschließlich ASP.NET Core MVC). Ich suche nach der neuen GUI-Desktop-Technologie. In Visual Studio 2015 Update 3 wird keine Option zum Erstellen einer GUI-App in .NET Core angezeigt. Was vermisse ich?

EKanadily
quelle
Sie sollten den Blickwinkel für diese neue Plattform ändern. Alle vorhandenen Frameworks, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android, können den Code verwenden, den Sie in .NET Core schreiben. Das ermöglicht die plattformübergreifende Entwicklung, nur nicht so, wie Sie es sich vorstellen.
Lex Li
Sie sagen also, dass ich GUIs in - zum Beispiel - Winforms und den Back-End-Code in .net Core
erstellen kann
Nein. Auf .NET Core basierende Pakete können direkt als Referenz hinzugefügt werden.
Lex Li
1
Elektron ist der richtige Weg. Verwenden Sie asp.net hinter einer API. Wenn Sie die UI-Logik leuchten lassen, sollten Sie in der Lage sein, den wichtigsten Teil der Anwendung auf .net zu behalten
user7558114
1
Als Pro-Tipp würde ich (wenn möglich) ein Upgrade auf Visual Studio 2017 durchführen oder andere verfügbare Tools verwenden (CLI und / oder VS Code / Rider), da VS 2015 keinen Zugriff auf .NET Core 2.0-Tools hat behindern Sie Ihre zukünftige Entwicklung. Auch wenn Sie nur damit experimentieren.
Jamie Taylor

Antworten:

64

Ihnen hat nichts gefehlt. MS lieferte keine vernünftige Möglichkeit, GUI-Anwendungen direkt mit .Net Core zu erstellen, bis .Net Core 3, obwohl UWP (Universal Windows Platform) teilweise auf .Net Core basiert.

.Net Core 3.0 unterstützt Winforms und WPF, obwohl es nur für Windows verfügbar ist.

Weitere plattformübergreifende Optionen, die in den letzten zwei Jahren angeboten wurden, finden Sie in anderen Antworten.

svick
quelle
41
omg, das ist ein schock! Was ist der Sinn eines plattformübergreifenden Frameworks ohne GUI?
EKanadily
19
@EssamGndelee Der Hauptpunkt sind ASP.NET Core-Anwendungen. Ein sekundärer Punkt sind Konsolenanwendungen.
Svick
3
@ChristopherPainter Bessere Unterstützung für Cloud Computing und die Gewinnung von Entwicklern von Plattformen wie Node.js sind einige der Gründe, warum .Net Core existiert, ja. Das heißt aber nicht, dass Microsoft sich jetzt nur um diese kümmert.
Svick
1
@CYoung Ich denke, Microsoft ist der Meinung, dass Sie dafür UWP verwenden sollten.
Svick
1
@svick, das würde jegliche plattformübergreifende Programmierung, die .NET Core lösen sollte, vollständig eliminieren. UWP ist nur für MS-Familien gut genug: /
Walther
41

Sie können Electron verwenden und es mit Edge.js resp. Elektronenkante . Mit Edge.js kann Electron (node.js) .net-DLLs aufrufen und umgekehrt. Auf diese Weise können Sie die GUI mit HTML, CSS und JavaScript und das Backend mit .net Core schreiben. Electron selbst ist ebenfalls plattformübergreifend und basiert auf dem Chrom-Browser.

P. Wenger
quelle
5
Aber warum Elektron? Sie können auch einfach eine Webanwendung auf Port X öffnen und dann mit dem Browser dorthin navigieren. Enthält alles, was Electron kann, und mehr, da dies im Gegensatz zu Electron immer die neueste Version des Browsers ist. Wenn Sie eine bestimmte Browserversion benötigen, fügen Sie Google-Chrome in Ihre Distribution ein.
Stefan Steiger
1
@StefanSteiger Ich denke, dass die Verwendung von Electron und das direkte Aufrufen der API über Assembly die Lücke füllen wird, in der Benutzer die App nicht als Web-App sehen. Und einige Entwickler möchten keine weitere Kommunikationsschicht über HTTP hinzufügen.
Brian Ng
Electron.Net sieht so aus, als ob dies jetzt ziemlich einfach ist. Cross-platform-blog.com/electron.net/…
J. Allen
Electron.NET sieht zwar vielversprechend aus, aber ich wäre es leid, es in der Produktion zu verwenden, da Sie dadurch gezwungen sind, einen nicht sicheren Webserver auf Ihrer Produktionsmaschine zu öffnen. Andererseits sollten Sie sicherer sein, solange sich das ASP.NET Core-Ende der App hinter einem ordnungsgemäß konfigurierten Reverse-Proxy-Server wie IIS oder Nginx (oder ähnlichem) befindet.
Jamie Taylor
Hölle könnte nur die App als MVC / Webapi, lokal auf zufälligen Port hosten und Elektronenschnittstelle verwenden, die lokale API aufruft.
Wjdavis5
39

AvaloniaUI unterstützt jetzt die Ausführung auf .NET Core unter Win / OSX / Linux. XAML, Bindungen und Kontrollvorlagen enthalten.

zB um mit Rider auf MacOs zu entwickeln:

  1. Befolgen Sie die Anweisungen, um die neuen Avalonia dotnet-Vorlagen zu installieren
  2. Öffnen Sie JetBrains Rider und auf dem Begrüßungsbildschirm
  3. Wählen Sie New Solution-> (oben in der Vorlagenliste) -> More Templates-> Schaltfläche Install Template...-> navigieren Sie zu dem Verzeichnis, in das Sie die Vorlagen in Schritt 1 geklont haben.
  4. Klicken Sie auf die ReloadSchaltfläche
  5. Erblicken! Avalonia-Vorlagen werden jetzt in der New SolutionVorlagenliste angezeigt!
  6. Wählen Sie eine Avalonia-Vorlage
  7. Bauen und ausführen. Sehen Sie, wie die GUI vor Ihren Augen geöffnet wird.

GUI-Schritte zum Installieren einer neuen Dotnet-Vorlage in JetBrains Rider

kekekeks
quelle
30

Es ist jetzt möglich, Qt / QtQuick / QML mit .NET Core unter Verwendung von Qml.Net zu verwenden .

Es ist sehr leistungsfähig (nicht "pinvoke chatty"), voll funktionsfähig und funktioniert unter Linux / OSX / Windows.

Schauen Sie sich meinen Blog-Beitrag an, um zu sehen, wie er mit den anderen derzeit verfügbaren Optionen verglichen wird.

PS: Ich bin der Autor.

Paul Knopf
quelle
Es sieht sehr vielversprechend aus, ich werde es untersuchen
Daniel
22

Eine Option wäre die Verwendung von Electron mit JavaScript, HTML und CSS für die Benutzeroberfläche und die Erstellung einer .Net Core-Konsolenanwendung, die eine Web-API für die Back-End-Logik selbst hostet. Electron startet die Konsolenanwendung im Hintergrund, wodurch ein Dienst auf localhost verfügbar gemacht wird: xxxx.

Auf diese Weise können Sie die gesamte Back-End-Logik mithilfe von .Net implementieren, um über HTTP-Anforderungen von JavaScript aus auf sie zugreifen zu können.

In diesem Beitrag wird erläutert, wie Sie eine plattformübergreifende Desktop-Anwendung mit Electron und .Net Core erstellen und den Code auf github überprüfen

Rui Figueiredo
quelle
17

Zum Erstellen einer konsolenbasierten Benutzeroberfläche können Sie gui.cs verwenden . Es ist Open Source (von Miguel, dem Erfinder von Xamarin) und läuft auf .NET Core unter Windows, Linux und MacOs.

Es hat die folgenden Komponenten:

  • Tasten
  • Etiketten
  • Texteingabe
  • Textübersicht
  • Zeitbearbeitungsfeld
  • Radio Knöpfe
  • Kontrollkästchen
  • Dialogboxen
    • Meldungsfelder
  • Windows
  • Menüs
  • ListViews
  • Rahmen
  • ProgressBars
  • Bildlaufansichten und Bildlaufleisten
  • Hexadezimaler Viewer / Editor (HexView)

Beispiel-Screenshot

Gui.cs Beispiel Ausgabe Screenshot

Kolappan N.
quelle
16

Wir haben eine Open-Source-Lösung für Elektronen mit .net-Kern codiert: Electron.NET . https://github.com/ElectronNET/Electron.NET

Genießen!

Gregor Biswanger
quelle
15
Was zum Teufel. Wenn ich eine HTML-Seite möchte, erstelle ich eine HTML-Seite. Ich möchte etwas, das besser mit dem Desktop interagiert.
Joshua
4

tl; dr - Ich bin nicht sicher, ob es den .NET Core-Entwicklern möglich sein würde, ein plattformübergreifendes GUI-Framework bereitzustellen.

Ich möchte erwarten, dass ein plattformübergreifendes GUI-Framework für eine frühe Version von .NET Core in den offiziellen Tools (insbesondere einer alten Version des Tools - Sie erwähnen, dass Sie VS 2015 Update 3 ausführen) für eine frühe Version von .NET Core gebündelt wird.

GUI-Frameworks sind sehr umfangreich und hängen von den Hardware-Abstraktionen ab, die bereits auf dem Host-Computer vorhanden sind. Unter Windows gibt es im Allgemeinen einen einzigen Fenstermanager (WM) und eine Desktopumgebung (DE), die von den meisten Benutzern verwendet werden. Unter den vielen verschiedenen Linux-Distributionen, die unterstützt werden, gibt es jedoch eine beliebige Anzahl möglicher WMs und DEs - vorausgesetzt, die meisten Benutzer werden dies auch tun Verwenden Sie X-Server oder Wayland in Kombination mit KDE, Gnome oder XFCE. Aber keine Linux-Installation ist die gleiche.

Die Tatsache, dass sich die Open Source-Community nicht wirklich auf ein "Standard" -Einrichten für eine VM und DE festlegen kann, bedeutet, dass es für die .NET Core-Entwickler ziemlich schwierig wäre, ein GUI-Framework zu erstellen, das auf allen Plattformen und Kombinationen von funktioniert DEs und WMs.

Viele Leute hier haben einige großartige Vorschläge (von der Verwendung von ASP.NET Core zum Erstellen einer Webanwendung und der Verwendung eines Browsers zum Auflisten einer Reihe plattformübergreifender Frameworks). Wenn Sie sich einige der genannten plattformübergreifenden GUI-Frameworks ansehen, werden Sie sehen, wie schwer sie sind.

Am Ende des Tunnels ist jedoch Licht, als Miguel de Icaza Xamarin unter Linux und MacOS auf der .NET Conf in diesem Jahr (2017, wenn Sie dies in Zukunft lesen) naiv laufen ließ. Es könnte sich also lohnen, es zu versuchen das, wenn es fertig ist.

(Sie müssen jedoch ein Upgrade von VS 2015 auf VS 2017 durchführen, um auf die .NET Core 2.0-Funktionen zugreifen zu können.)

Jamie Taylor
quelle
Keine Begründung für Linux-Vielfalt. 1. Java läuft reibungslos 2. Mono läuft WinForms normal (du hässlich) Unter Linux können Sie GTK auf QT-basierter Distribution verwenden und umgekehrt. Es wäre cool, QT-Bindungen für den .net-Kern zu haben.
Bogdan Mart
Ich stimme mit allem überein, was Sie sagen. Ich bin jedoch der Meinung, dass Microsoft derzeit IaaS (Infrastruktur als Service), SaaS (Software als Service) und PaaS (Plattform als Service) über seine Azure-Plattform bereitstellt. Es wäre sinnvoll, wenn das plattformübergreifende Open Source-Framework der ersten Partei den Entwicklern vorrangig diese Richtung weisen würde. Die Arbeit von Azure und anderen Unternehmen wie RHEL und Google zur Unterstützung von ASP NET Core und .NET Core ist praktisch legendär, und es ist sinnvoll, dass die Priorität für .NET Core dies zu widerspiegeln scheint.
Jamie Taylor
4

Ich arbeite an einem Projekt, das helfen könnte: https://github.com/gkmo/CarloSharp

Die folgende Anwendung ist in .net mit der Benutzeroberfläche in HTML / JS / CSS (Angular) geschrieben.

Geben Sie hier die Bildbeschreibung ein

Guilhermekmelo
quelle
1
Bitte kein HTML.
Richard Lalancette
3

Sie können eine Webanwendung mit .NET Core und MVC entwickeln und in einer universellen Windows-JavaScript-App kapseln: https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

Es ist immer noch eine Web-App, aber es ist eine sehr einfache Möglichkeit, eine Web-App in eine Desktop-App umzuwandeln, ohne ein neues Framework zu erlernen oder / und die Benutzeroberfläche neu zu entwickeln. Es funktioniert hervorragend.

Die Unannehmlichkeit ist anders als bei Elektronen oder ReactXP . Das Ergebnis ist eine universelle Windows-App und keine plattformübergreifende Desktop-App.

AdrienTorris
quelle
2

Ja, es ist möglich.

.NET Core verfügt standardmäßig über keine Komponenten für native GUI-Anwendungen. Es gibt jedoch ein NuGet-Paket dafür , das gemäß der Antwort von Gregor Biswanger Electron.NET heißt .

Elektron ist ein Framework, mit dem Sie native GUI-Anwendungen auf Node.js erstellen können. Electron.NET ist ein NuGet-Paket, mit dem Sie Electron und Node.js in Ihrem .NET Core-Code verwenden können.

Die gute Nachricht ist, dass Sie nicht JavaScript, Electron oder Node.js lernen müssen, um das NuGet-Paket verwenden zu können. JS-Dateien werden zwar in Ihrer Anwendung ausgeführt, aber vom Erstellungsprozess automatisch generiert.

Sie erstellen lediglich eine ziemlich standardmäßige ASP.NET Core MVC-App. Der einzige Unterschied besteht darin, dass es nicht im Browser, sondern als native Fenster-App ausgeführt wird. Abgesehen von nur wenigen Codezeilen, die für das Electron.NET-Paket spezifisch sind, müssen Sie über ASP.NET Core MVC nichts lernen.

Diese Seite enthält ein Tutorial zur Verwendung. Es enthält auch einige Links zu Beispielcode-Repositorys.

Fiodar Sazanavets
quelle
2

Nekromantie.
Für den Sonderfall bestehender WinForms-Anwendungen :

Es gibt einen Weg - obwohl ich nicht weiß, wie gut es funktioniert.
Es geht so:
Nehmen Sie die WinForms-Implementierung von Mono.
Portieren Sie es auf .NET Core oder NetStandard.

Kompilieren Sie Ihre WinForms-Anwendungen neu mit den neuen System.Windows.Forms.
Beheben Sie alles, was von NetCore beschädigt werden könnte.
Beten Sie, dass Mono die Teile, die Sie benötigen, einwandfrei implementiert.
(Wenn dies nicht der Fall ist, können Sie jederzeit aufhören zu beten und dem Monoprojekt eine Pull-Anfrage mit Ihrem Fix / Patch / Feature senden.)

Hier ist mein CoreFX WinForms-Repo:
https://github.com/ststeiger/System.CoreFX.Forms

Stefan Steiger
quelle
2

Es ist eine alte Frage, aber ja, es ist möglich, plattformübergreifende Desktop-Anwendungen (GUI) für Windows, Linux und macOS mit VSCode, .Net Core, C #, gtk3, gtksharp und Glade als GUI-Designer zu entwickeln.

Hier ist wie .

Teo Bebekis
quelle
0

Wenn Sie .Net Core 3.0und höher verwenden, führen Sie die folgenden Schritte aus und Sie können loslegen: (Ich werde .NET Core CLI verwenden , aber Sie können auch Visual Studio verwenden.)

  1. md MyWinFormsApp optionaler Schritt
  2. cd MyWinFormsApp optionaler Schritt
  3. dotnet new sln -n MyWinFormsApp optionaler Schritt, aber es ist eine gute Idee
  4. dotnet new winforms -n MyWinFormsApp Es tut mir leid, das ist nicht optional
  5. dotnet sln add MyWinFormsApp Tun Sie dies, wenn Sie Schritt 3 ausgeführt haben

Okay, Sie können aufhören, meine Antwort zu lesen, und dem MyWinFormsAppProjekt Code hinzufügen . Wenn Sie jedoch mit Form Designer arbeiten möchten , lesen Sie weiter.

  1. Öffnen Sie die MyWinFormsApp.csprojDatei und wechseln Sie <TargetFramework>netcoreapp3.1<TargetFramework>zu <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(wenn Sie netcoreapp3.0keine Sorge verwenden, ändern Sie sie zu <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>)
  2. Fügen Sie dann Folgendes hinzu ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

Nachdem Sie diese Schritte ausgeführt haben, sollten Sie Folgendes tun:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

</Project>
  1. Öffnen Program.csSie den folgenden Präprozessor und fügen Sie ihn hinzu
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Jetzt können Sie das MyWinFormsAppProjekt mit Visual Studio 2019 öffnen ( ich denke, Sie können auch Visual Studio 2017 verwenden, bin mir aber nicht sicher ) und doppelklicken auf Form1.csund Sie sollten Folgendes sehen:

Geben Sie hier die Bildbeschreibung ein

Okay, öffne Toolbox ( Ctrl+W,X) und füge deiner App Steuerelemente hinzu und mache sie hübsch.

Weitere Informationen zu designer @ Windows Forms .NET Core Designer finden Sie hier

Mehdi Dehghani
quelle