Czy jest możliwe stworzenie aplikacji graficznej na komputery stacjonarne w .NET core?

110

Od kilku lat rozwijam programy WinForms. Patrzę teraz na .NET Core (w tym ASP.NET Core MVC). Szukam nowej technologii graficznej GUI. W programie Visual Studio 2015, aktualizacja 3 nie widzę żadnej opcji tworzenia aplikacji z interfejsem graficznym w .NET Core. czego mi brakuje?

EKanadily
źródło
Powinieneś zmienić kąt widzenia tej nowej platformy. Wszystkie istniejące platformy, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android mogą używać kodu, który piszesz w .NET Core. To umożliwia rozwój międzyplatformowy, ale nie w sposób, jaki sobie wyobrażasz.
Lex Li
Więc mówisz, że mogę zbudować GUI w - na przykład - winforms i kod zaplecza w .net core
EKanadily
Nie. Pakiety oparte na platformie .NET Core można dodawać bezpośrednio jako odwołania.
Lex Li
1
Electron to droga do zrobienia. Użyj asp.net za interfejsem API. Jeśli zachowasz światło logiki interfejsu użytkownika, powinieneś być w stanie zachować najważniejszą część aplikacji na .net
user7558114
1
Jako profesjonalna wskazówka, zaktualizowałbym do Visual Studio 2017 (jeśli to możliwe) lub użył innych dostępnych narzędzi (CLI i / lub VS Code / Rider), ponieważ VS 2015 nie ma dostępu do narzędzi .NET Core 2.0, które będą utrudniać rozwój. Nawet jeśli wszystko, co robisz, to eksperymentowanie z tym.
Jamie Taylor

Odpowiedzi:

73

Niczego nie brakowało. Firma MS nie dostarczyła żadnego rozsądnego sposobu na tworzenie aplikacji GUI bezpośrednio przy użyciu .Net Core do .Net Core 3, chociaż UWP (Universal Windows Platform) jest częściowo zbudowany na .Net Core.

.Net Core 3.0 obejmuje obsługę Winforms i WPF, chociaż jest dostępna tylko dla systemu Windows.

.Net 6 będzie zawierał .Net MAUI, który będzie obsługiwał aplikacje desktopowe dla systemów Windows i macOS oraz aplikacje mobilne, z aplikacjami komputerowymi Linux obsługiwanymi przez społeczność (nie MS). .Net 5 będzie zawierać podglądową wersję .Net MAUI.

Aby zapoznać się z opcjami dla różnych platform, zobacz inne odpowiedzi.

svick
źródło
45
omg, to jest szok! więc jaki jest sens struktury wieloplatformowej, która nie ma GUI?
EKanadily
21
@EssamGndelee Głównym punktem są aplikacje ASP.NET Core. Dodatkowym punktem są aplikacje konsolowe.
svick
3
@ChristopherPainter Lepsze wsparcie dla przetwarzania w chmurze i przyciąganie programistów z platform takich jak Node.js to tylko niektóre z powodów, dla których .Net Core istnieje, tak. Ale to nie znaczy, że Microsoftowi zależy teraz tylko na nich.
svick
1
@CYoung Myślę, że stanowisko Microsoftu jest takie, że powinieneś używać do tego UWP.
svick
1
@svick, to całkowicie wyeliminowałoby programowanie międzyplatformowe, które miał rozwiązać .NET Core. UWP jest wystarczająco dobry tylko dla rodziny MS: /
walther
50

AvaloniaUI obsługuje teraz działanie na platformie .NET Core w systemach Win / OSX / Linux. Zawiera XAML, powiązania i szablony formantów.

np. aby rozwijać się na MacOs z Rider:

  1. Postępuj zgodnie z instrukcjami, aby zainstalować nowe szablony Avalonia dotnet
  2. Otwórz JetBrains Rider i z ekranu powitalnego,
  3. Wybierz New Solution-> (U góry listy szablonów) -> More Templates-> Przycisk Install Template...-> przejdź do katalogu, w którym sklonowałeś szablony w kroku 1.
  4. Kliknij Reloadprzycisk
  5. Ujrzeć! Szablony Avalonia pojawiają się teraz na liście New Solutionszablonów!
  6. Wybierz szablon Avalonia
  7. Buduj i uruchamiaj. Zobacz, jak GUI otwiera się na twoich oczach.

GUI kroki, aby zainstalować nowy szablon dotnet w JetBrains Rider

kekekeks
źródło
Na marginesie, wszyscy zainteresowani zagłosuj na Jetbrains w celu włączenia obsługi Avalonia do Rider: youtrack.jetbrains.com/issue/RIDER-39247
xendi
40

Możesz użyć Electron i połączyć go z Edge.js odp. krawędź elektronu . Edge.js umożliwia elektronowi (node.js) wywoływanie bibliotek .net dll i odwrotnie. W ten sposób możesz napisać GUI z HTML, CSS i JavaScript, a backend z .net core. Sam Electron jest również wieloplatformowy i oparty na przeglądarce chromu.

P. Wenger
źródło
7
Ale dlaczego elektron? Możesz także po prostu otworzyć aplikację internetową na porcie X, a następnie przejść tam w przeglądarce. Obejmuje wszystko, co może Electron, a także więcej, ponieważ jest to zawsze najnowsza wersja przeglądarki - w przeciwieństwie do Electron. Jeśli potrzebujesz określonej wersji przeglądarki, dołącz Google-Chrome do swojej dystrybucji.
Stefan Steiger
1
@StefanSteiger Myślę, że użycie electron, a także wywołanie API bezpośrednio przez assembler wypełni lukę, że użytkownik nie będzie widział aplikacji jako aplikacji internetowej. Niektórzy programiści nie chcą dodawać więcej warstwy komunikacyjnej za pomocą protokołu HTTP.
Brian Ng
Wygląda na to, że Electron.Net jest teraz całkiem prosty cross-platform-blog.com/electron.net/…
J. Allen
Electron.NET wygląda obiecująco, ale byłbym zmęczony używaniem go w środowisku produkcyjnym, ponieważ zmusza Cię do otwarcia niezabezpieczonego serwera WWW na maszynie produkcyjnej. Z drugiej strony, o ile koniec aplikacji ASP.NET Core znajduje się za odpowiednio skonfigurowanym odwrotnym serwerem proxy, takim jak IIS lub nginx (lub podobny), powinieneś być bezpieczniejszy.
Jamie Taylor
piekło może po prostu aplikacja jako mvc / webapi, hostować lokalnie na losowym porcie i używać interfejsu electron wywołującego lokalne API.
Wjdavis5
31

Obecnie można używać Qt / QtQuick / QML z .NET Core, używając Qml.Net .

Jest bardzo wydajny (nie "pinvoke chatty"), w pełni funkcjonalny i działa w systemach Linux / OSX / Windows.

Sprawdź mój post na blogu, aby zobaczyć, jak wypada on w porównaniu z innymi dostępnymi obecnie opcjami.

PS: Jestem autorem.

Paul Knopf
źródło
Wygląda bardzo obiecująco, przyjrzę się temu
Daniel
21

Jedną z opcji byłoby użycie Electron z JavaScript, HTML i CSS dla interfejsu użytkownika i zbudowanie aplikacji konsoli .Net Core, która będzie samodzielnie hostować interfejs API sieci Web dla logiki zaplecza. Electron uruchomi w tle aplikację konsolową, która ujawni usługę na localhost: xxxx.

W ten sposób można zaimplementować całą logikę zaplecza za pomocą .Net, aby była dostępna przez żądania HTTP z JavaScript.

Spójrz na ten post, wyjaśnia, jak zbudować wieloplatformową aplikację komputerową z Electron i .Net Core i sprawdzić kod na github

Rui Figueiredo
źródło
20

Do tworzenia interfejsu użytkownika opartego na konsoli, można użyć gui.cs . Jest open source (autorstwa Miguela, twórcy platformy Xamarin) i działa na platformie .Net Core w systemach Windows, Linux i MacOs.

Składa się z następujących elementów:

  • guziki
  • Etykiety
  • Wpis tekstowy
  • Widok tekstu
  • Pole edycji czasu
  • Przyciski radiowe
  • Pola wyboru
  • Okna dialogowe
    • Skrzynki wiadomości
  • Windows
  • Menu
  • ListViews
  • Ramy
  • ProgressBars
  • Przewijaj widoki i paski przewijania
  • Przeglądarka / edytor szesnastkowy (HexView)

Przykładowy zrzut ekranu

Przykładowy zrzut ekranu wyjściowego gui.cs

Kolappan N
źródło
17

zakodowaliśmy rozwiązanie open source dla elektronów z rdzeniem .net: Electron.NET . https://github.com/ElectronNET/Electron.NET

Cieszyć się!

Gregor Biswanger
źródło
17
Co do cholery. Jeśli chcę mieć stronę HTML, utworzę stronę HTML. Chcę czegoś, co lepiej współdziała z pulpitem niż to.
Joshua,
4

tl; dr - Nie jestem pewien, czy deweloperzy .NET Core mogliby dostarczyć międzyplatformowy framework GUI.

Mam ochotę oczekiwać, że wieloplatformowy framework GUI zostanie dołączony do oficjalnych narzędzi (zwłaszcza stara wersja narzędzi - wspomniałeś, że używasz VS 2015 Update 3) dla wczesnej wersji .NET Core jest trochę przedwczesna.

Struktury GUI są naprawdę dość ciężkie i zależą od abstrakcji sprzętowych już obecnych na maszynie hosta. W systemie Windows jest generalnie jeden menedżer okien (WM) i środowisko graficzne (DE) używane przez większość użytkowników, ale w wielu różnych dystrybucjach Linuksa, które są obsługiwane, istnieje dowolna liczba możliwych WM i DE - przy czym większość użytkowników będzie albo używać X-Server lub Wayland w połączeniu z KDE, Gnome lub XFCE. Ale żadna instalacja Linuksa nie jest taka sama.

Fakt, że społeczność open source nie może tak naprawdę zdecydować się na „standardową” konfigurację maszyny wirtualnej i DE oznacza, że ​​twórcom .NET Core byłoby dość trudno stworzyć strukturę GUI, która działałaby na wszystkich platformach i kombinacjach DE i WM.

Wielu ludzi tutaj ma kilka świetnych sugestii (od używania ASP.NET Core do tworzenia aplikacji sieci Web i używania przeglądarki do wyświetlania listy wielu platform międzyplatformowych). Jeśli spojrzysz na niektóre z wymienionych powyżej platform GUI, zobaczysz, jakie są ciężkie.

Jednak na końcu tunelu jest światło, ponieważ Miguel de Icaza popisał się naiwnie działającym Xamarinem na Linuksie i MacOS na .NET Conf w tym roku (2017, jeśli czytasz to w przyszłości), więc może warto spróbować że kiedy będzie gotowe.

(ale aby uzyskać dostęp do funkcji .NET Core 2.0, musisz zaktualizować wersję VS 2015 do VS 2017)

Jamie Taylor
źródło
brak uzasadnienia dla różnorodności Linuksa. 1. Java działa płynnie 2. Mono uruchamia WinForms normalnie (co brzydkie) W linuksie możesz używać GTK na dystrybucji opartej na QT i odwrotnie. Fajnie byłoby mieć wiązania QT dla .net core.
Bogdan Mart
Zgadzam się ze wszystkim, co mówisz. Uważam jednak, że podejście firmy Microsoft polega obecnie na dostarczaniu IaaS (infrastruktura jako usługa), SaaS (oprogramowanie jako usługa) i PaaS (platforma jako usługa) za pośrednictwem platformy Azure. Miałoby sens, gdyby ich pierwszy, otwarty, wieloplatformowy framework wskazywał programistom ten kierunek jako priorytet. Praca, którą Azure i inne firmy, takie jak RHEL i Google, wykonują w celu obsługi zarówno ASP NET Core, jak i .NET Core, jest praktycznie legendarna i ma sens, że priorytet dla .NET Core wydaje się to odzwierciedlać.
Jamie Taylor
4

Pracuję nad projektem, który może pomóc: https://github.com/gkmo/CarloSharp

Następująca aplikacja jest napisana w .net z interfejsem użytkownika w HTML / JS / CSS (Angular)

wprowadź opis obrazu tutaj

guilhermekmelo
źródło
2
Bez kodu HTML.
Richard Lalancette
3

Możesz stworzyć aplikację internetową z .NET Core i MVC i zamknąć ją w uniwersalnej aplikacji JavaScript systemu Windows: https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

Wciąż jest to aplikacja internetowa, ale jest to bardzo lekki sposób na przekształcenie aplikacji internetowej w aplikację komputerową bez uczenia się nowego frameworka lub / i przeprojektowywania interfejsu użytkownika i działa świetnie.

Niedogodność jest inna niż na przykład electron czy ReactXP , w rezultacie powstała uniwersalna aplikacja Windows, a nie wieloplatformowa aplikacja komputerowa.

AdrienTorris
źródło
3

Tak to mozliwe.

NET Core nie ma żadnych składników dla natywnej aplikacji GUI po wyjęciu z pudełka. Istnieje jednak pakiet NuGet o nazwie Electron.NET , zgodnie z odpowiedzią Gregora Biswangera.

Elektron to framework, który umożliwia tworzenie natywnych aplikacji GUI w oparciu o Node.js. Electron.NET to pakiet NuGet, który umożliwia korzystanie z Electron i Node.js z poziomu kodu .NET Core.

Dobra wiadomość jest taka, że ​​nie musisz uczyć się JavaScript, Electron ani Node.js, aby móc korzystać z pakietu NuGet. Pliki JS działają w aplikacji, ale są automatycznie generowane podczas procesu kompilacji.

Wszystko, co musisz zrobić, to zbudować całkiem standardową aplikację ASP.NET Core MVC. Jedyną różnicą jest to, że zamiast działać w przeglądarce, działa jako natywna aplikacja okienna. Poza kilkoma wierszami kodu specyficznego dla pakietu Electron.NET, nie musisz uczyć się niczego powyżej ASP.NET Core MVC.

Ta strona zawiera samouczek, jak z niego korzystać. Zawiera również linki do przykładowych repozytoriów kodu.

Fiodar Sazanavets
źródło
2

Nekromancja.
Dla szczególnego przypadku istniejących aplikacji WinForms :

Jest sposób - chociaż nie wiem, jak dobrze działa.
Działa to tak:
weź implementację WinForms z mono.
Przenieś go na .NET Core lub NetStandard.

Ponownie skompiluj aplikacje WinForms do nowego System.Windows.Forms.
Napraw wszystko, co może zostać uszkodzone przez NetCore.
Módlcie się, aby mono bezbłędnie realizowało potrzebne części.
(jeśli tak się nie stanie, zawsze możesz przestać się modlić i wysłać mono-projektowi żądanie ściągnięcia z poprawką / poprawką / funkcją)

Oto moje repozytorium CoreFX WinForms:
https://github.com/ststeiger/System.CoreFX.Forms

Stefan Steiger
źródło
2

To stare pytanie, ale tak, możliwe jest tworzenie wieloplatformowych aplikacji desktopowych (GUI) dla systemów Windows, Linux i macOS, używając VSCode, .Net Core, C #, gtk3, gtksharp i Glade jako projektanta GUI.

Oto jak .

Teo Bebekis
źródło
0

Jeśli używasz .Net Core 3.0i powyżej, wykonaj następujące kroki i możesz już iść: (mam zamiar używać .NET Core CLI , ale możesz też użyć Visual Studio)

  1. md MyWinFormsApp krok opcjonalny
  2. cd MyWinFormsApp krok opcjonalny
  3. dotnet new sln -n MyWinFormsApp krok opcjonalny, ale to dobry pomysł
  4. dotnet new winforms -n MyWinFormsApp Przepraszam, to nie jest opcjonalne
  5. dotnet sln add MyWinFormsApp zrób to, jeśli wykonałeś krok 3

OK, możesz przestać czytać moją odpowiedź i zacząć dodawać kod do MyWinFormsAppprojektu. ale jeśli chcesz pracować z Projektantem formularzy, czytaj dalej.

  1. Otwórz MyWinFormsApp.csprojplik i zmień go <TargetFramework>netcoreapp3.1<TargetFramework>na <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(jeśli używasz netcoreapp3.0, nie martw się, zmień go na<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks> )
  2. Następnie dodaj następujące ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

Po wykonaniu tych kroków powinieneś otrzymać:

<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. Otwórz Program.csi dodaj następujący preprocesor-if
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Teraz możesz otworzyć MyWinFormsAppprojekt za pomocą Visual Studio 2019 ( myślę, że możesz też użyć Visual Studio 2017, ale nie jestem pewien ) i dwukrotnie kliknąć Form1.csi powinieneś zobaczyć to:

wprowadź opis obrazu tutaj

OK, otwórz Toolbox (Ctrl+W,X ) i zacznij dodawać elementy sterujące do swojej aplikacji i spraw, by była ładna.

Możesz przeczytać więcej o Designer @ Windows Forms .NET Core Designer

Mehdi Dehghani
źródło
0

WinForms (i jego projektant wizualny) są dostępne dla platformy .NET Core (jako wersja zapoznawcza) od programu Visual Studio 2019 16.6. Jest całkiem niezły, chociaż czasami muszę otworzyć wersję zapoznawczą Visual Studio 2019 16.7, aby obejść irytujące błędy.

Zobacz ten wpis na blogu: https://devblogs.microsoft.com/dotnet/windows-forms-designer-for-net-core-released/

Ponadto WinForms jest teraz open source: https://github.com/dotnet/winforms

A. Niese
źródło