Apakah mungkin membuat aplikasi GUI desktop di .NET core?

103

Saya telah mengembangkan program WinForms selama beberapa tahun. Saya sekarang melihat ke .NET Core (termasuk ASP.NET Core MVC). Saya mencari teknologi desktop GUI yang baru. Dalam Visual Studio 2015 pembaruan 3 saya tidak dapat melihat opsi apa pun untuk membuat aplikasi GUI di .NET Core. Apa yang saya lewatkan?

EKanadily
sumber
Anda harus mengubah sudut pandang platform baru ini. Setiap framework yang ada, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android dapat menggunakan kode yang Anda tulis di .NET Core. Itu memungkinkan pengembangan lintas platform, tidak seperti yang Anda bayangkan.
Lex Li
Jadi Anda mengatakan bahwa saya dapat membangun GUI dalam -misalnya- winforms dan kode ujung belakang dalam .net core
EKanadily
tidak. Paket yang dibangun di atas .NET Core dapat ditambahkan sebagai referensi secara langsung.
Lex Li
1
Elektron adalah cara untuk pergi. Gunakan asp.net di belakang api. Jika Anda mempertahankan lampu logika ui, Anda harus dapat menyimpan bagian terpenting aplikasi di .net
user7558114
1
Sebagai tip pro, saya akan memutakhirkan ke Visual Studio 2017 (jika memungkinkan) atau menggunakan alat lain yang tersedia (CLI dan / atau VS Code / Rider) karena VS 2015 tidak memiliki akses ke perkakas .NET Core 2.0, yang akan menghambat perkembangan Anda ke depan. Bahkan jika yang Anda lakukan hanyalah bereksperimen dengannya.
Jamie Taylor

Jawaban:

66

Anda tidak melewatkan apa pun. MS tidak mengirimkan cara yang masuk akal untuk membuat aplikasi GUI secara langsung menggunakan .Net Core hingga .Net Core 3, meskipun UWP (Platform Windows Universal) sebagian dibangun di atas .Net Core.

.Net Core 3.0 menyertakan dukungan untuk Winforms dan WPF, meskipun hanya untuk Windows.

.Net 6 akan menyertakan .Net MAUI, yang akan mendukung aplikasi desktop Windows dan macOS dan aplikasi seluler, dengan aplikasi desktop Linux yang didukung oleh komunitas (bukan MS). .Net 5 akan menyertakan versi pratinjau .Net MAUI.

Untuk opsi lintas platform pihak ketiga, lihat jawaban lain.

svick.dll
sumber
42
Omg, itu mengejutkan! jadi apa gunanya kerangka lintas platform yang tidak memiliki GUI?
EKanadily
19
@EssamGndelee Poin utama adalah aplikasi ASP.NET Core. Poin kedua adalah aplikasi konsol.
svick
3
@ChristopherPainter Dukungan yang lebih baik untuk komputasi awan dan menarik pengembang dari platform seperti Node.js adalah beberapa alasan mengapa .Net Core ada, ya. Tetapi itu tidak berarti Microsoft hanya peduli tentang itu sekarang.
svick
1
@CYoung Saya pikir pendirian Microsoft adalah Anda harus menggunakan UWP untuk itu.
svick
1
@svick, itu akan sepenuhnya menghilangkan pemrograman lintas platform, yang seharusnya diselesaikan oleh .NET Core. UWP cukup baik hanya untuk keluarga MS: /
walther
43

AvaloniaUI sekarang memiliki dukungan untuk berjalan di atas .NET Core di Win / OSX / Linux. XAML, binding dan template kontrol disertakan.

misalnya untuk mengembangkan di MacO dengan Rider:

  1. Ikuti petunjuk untuk menginstal template baru Avalonia dotnet
  2. Buka JetBrains Rider dan dari layar Selamat Datang,
  3. Pilih New Solution-> (Dekat bagian atas Daftar Templat) -> More Templates-> Tombol Install Template...-> telusuri direktori tempat Anda mengkloning templat pada langkah 1.
  4. Klik ReloadTombol
  5. Melihat! Template Avalonia sekarang muncul di New SolutionDaftar Template!
  6. Pilih template Avalonia
  7. Bangun dan jalankan. Lihat GUI terbuka di depan mata Anda.

Langkah GUI untuk menginstal template baru dotnet ke JetBrains Rider

kekekeks
sumber
Selain itu, siapa pun yang tertarik, silakan pilih Jetbrains untuk menyertakan dukungan Avalonia di Rider: youtrack.jetbrains.com/issue/RIDER-39247
xendi
41

Anda bisa menggunakan Electron dan menyambungkannya dengan Edge.js resp. tepi elektron . Edge.js memungkinkan electron (node.js) untuk memanggil dll .net dan sebaliknya. Dengan cara ini Anda dapat menulis GUI dengan HTML, CSS dan JavaScript dan backend dengan inti .net. Elektron itu sendiri juga lintas platform dan berbasis browser kromium.

P. Wenger
sumber
5
Tapi mengapa elektron? Anda juga bisa membuka aplikasi web di port X dan kemudian menavigasi browser ke sana. Mencakup semua yang bisa dilakukan Electron, dan lebih banyak lagi karena itu selalu versi terbaru dari peramban - tidak seperti Electron. Jika Anda memerlukan versi browser tertentu, sertakan Google-Chrome dalam distribusi Anda.
Stefan Steiger
1
@StefanSteiger Menurut saya, menggunakan electron dan juga memanggil API secara langsung melalui perakitan akan mengisi celah dimana pengguna tidak akan melihat aplikasi sebagai aplikasi web. Dan beberapa pengembang tidak ingin menambahkan lebih banyak lapisan komunikasi menggunakan HTTP.
Brian Ng
Electron.Net sepertinya ini cukup sederhana sekarang cross-platform-blog.com/electron.net/…
J. Allen
Electron.NET memang terlihat menjanjikan, tetapi saya akan bosan menggunakannya dalam produksi karena memaksa Anda untuk membuka server web yang tidak aman di mesin produksi Anda. Kemudian lagi, selama ujung ASP.NET Core dari aplikasi berada di belakang server proxy terbalik yang dikonfigurasi dengan benar seperti IIS atau nginx (atau serupa), maka Anda harus lebih aman.
Jamie Taylor
sih bisa saja aplikasi sebagai mvc / webapi, host secara lokal di port acak, dan menggunakan antarmuka elektron yang memanggil api lokal.
Wjdavis5
30

Sekarang dimungkinkan untuk menggunakan Qt / QtQuick / QML dengan .NET Core, menggunakan Qml.Net .

Ini sangat berkinerja (bukan "pinvoke chatty"), berfitur lengkap dan bekerja di Linux / OSX / Windows.

Lihat posting blog saya untuk melihat bagaimana perbandingannya dengan opsi lain di luar sana saat ini.

PS: Saya penulisnya.

Paul Knopf
sumber
Kelihatannya sangat menjanjikan, saya akan memeriksanya
Daniel
22

Salah satu opsi adalah menggunakan Electron dengan JavaScript, HTML, dan CSS untuk UI dan membangun aplikasi konsol .Net Core yang akan menghosting sendiri api web untuk logika back-end. Electron akan memulai aplikasi konsol di latar belakang yang akan menampilkan layanan di localhost: xxxx.

Dengan cara ini Anda dapat menerapkan semua logika back-end menggunakan .Net agar dapat diakses melalui permintaan HTTP dari JavaScript.

Lihatlah posting ini, ini menjelaskan cara membangun aplikasi desktop lintas platform dengan Electron dan .Net Core dan memeriksa kode di github

Rui Figueiredo
sumber
17

Untuk membuat UI berbasis konsol, Anda dapat menggunakan gui.cs . Ini adalah open-source (dari Miguel, pencipta Xamarin), dan berjalan pada inti .Net pada Windows, Linux & MacOs.

Ini memiliki komponen berikut:

  • Tombol
  • Label
  • Entri teks
  • Tampilan teks
  • Bidang pengeditan waktu
  • Tombol radio
  • Kotak centang
  • Kotak dialog
    • Kotak pesan
  • Windows
  • Menu
  • ListView
  • Bingkai
  • ProgressBars
  • Tampilan gulir dan Scrollbar
  • Penampil / editor heksadesimal (HexView)

Contoh tangkapan layar

tangkapan layar contoh keluaran gui.cs

Kolappan N
sumber
16

kami membuat kode solusi open source untuk elektron dengan .net core: Electron.NET . https://github.com/ElectronNET/Electron.NET

Nikmati!

Gregor Biswanger
sumber
15
Apa bleep itu. Jika saya menginginkan halaman HTML, saya akan membuat halaman HTML. Saya ingin sesuatu yang berinteraksi dengan desktop lebih baik dari ini.
Joshua
4

tl; dr - Saya tidak yakin bahwa mungkin .NET Core devs menyediakan kerangka kerja GUI lintas platform.

Saya merasa seperti mengharapkan kerangka GUI lintas platform untuk digabungkan ke dalam perkakas resmi (terutama versi lama dari perkakas - Anda menyebutkan bahwa Anda menjalankan VS 2015 pembaruan 3) untuk versi awal .NET Core sedikit prematur.

Kerangka GUI benar-benar cukup berat, dan bergantung pada abstraksi perangkat keras yang sudah ada di mesin host. Pada Windows umumnya ada satu window manager (WM) dan lingkungan desktop (DE) yang digunakan oleh sebagian besar pengguna, tetapi pada banyak distribusi Linux yang didukung, ada sejumlah kemungkinan WM dan DE - diberikan sebagian besar pengguna akan menggunakan X-Server atau Wayland dalam kombinasi dengan KDE, Gnome atau XFCE. Tetapi tidak ada instalasi Linux yang sama.

Fakta bahwa komunitas open source tidak dapat benar-benar menyelesaikan pengaturan "standar" untuk VM dan DE berarti akan sangat sulit bagi pengembang .NET Core untuk membuat kerangka kerja GUI yang akan bekerja di semua platform dan kombinasi DE dan WM.

Banyak orang di sini memiliki beberapa saran bagus (mulai dari penggunaan ASP.NET Core untuk membuat aplikasi Web dan menggunakan browser untuk mendaftar sekumpulan kerangka kerja lintas platform). Jika Anda melihat beberapa kerangka GUI lintas platform yang disebutkan yang terdaftar, Anda akan melihat betapa beratnya mereka.

Namun, ada cahaya di ujung terowongan saat Miguel de Icaza memamerkan Xamarin yang berjalan secara naif di Linux dan MacOS di .NET Conf tahun ini (2017, jika Anda membaca ini di masa mendatang), jadi mungkin patut untuk dicoba itu jika sudah siap.

(tetapi Anda harus meningkatkan dari VS 2015 ke VS 2017 untuk mengakses fitur .NET Core 2.0)

Jamie Taylor
sumber
tidak ada alasan untuk variasi linux. 1. Java berjalan lancar 2. Mono menjalankan WinForms noramlly (thou ugly) Di linux Anda dapat menggunakan GTK pada distro berbasis QT dan sebaliknya. Akan sangat keren jika memiliki pengikatan QT untuk inti .net.
Bogdan Mart
Saya setuju dengan semua yang Anda katakan. Namun, saya merasa pendekatan Microsoft adalah menyediakan IaaS (Infrastruktur sebagai Layanan), SaaS (Perangkat Lunak sebagai Layanan), dan PaaS (Platform sebagai Layanan) melalui platform Azure-nya saat ini. Masuk akal jika pihak pertama mereka, open source, kerangka kerja lintas platform akan mengarahkan pengembang ke arah itu sebagai prioritas. Pekerjaan yang dilakukan Azure dan perusahaan lain seperti RHEL dan Google untuk mendukung ASP NET Core dan .NET Core praktis legendaris, dan masuk akal bahwa prioritas untuk .NET Core tampaknya mencerminkan hal itu.
Jamie Taylor
4

Saya sedang mengerjakan proyek yang mungkin membantu: https://github.com/gkmo/CarloSharp

Aplikasi berikut ditulis dalam .net dengan UI dalam HTML / JS / CSS (Angular)

masukkan deskripsi gambar di sini

guilhermekmelo
sumber
1
Tidak ada HTML.
Richard Lalancette
3

Anda dapat mengembangkan aplikasi web dengan .NET Core dan MVC dan merangkumnya dalam aplikasi JavaScript universal Windows: https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

Ini masih merupakan aplikasi web tetapi ini adalah cara yang sangat ringan untuk mengubah aplikasi web menjadi aplikasi desktop tanpa mempelajari kerangka kerja baru atau / dan mengembangkan kembali UI, dan ini berfungsi dengan baik.

Ketidaknyamanan ini tidak seperti electron atau ReactXP misalnya, hasilnya adalah aplikasi Windows universal dan bukan aplikasi desktop lintas platform.

AdrienTorris
sumber
2

Ya, itu mungkin.

.NET Core tidak memiliki komponen apa pun untuk aplikasi GUI asli di luar kotak. Namun, ada paket NuGet untuknya yang disebut Electron.NET , sesuai jawaban Gregor Biswanger.

Electron adalah kerangka kerja yang memungkinkan Anda membangun aplikasi GUI asli di atas Node.js. Electron.NET adalah paket NuGet yang memungkinkan Anda untuk memanfaatkan Electron dan Node.js dari dalam kode Inti .NET Anda.

Kabar baiknya adalah Anda tidak perlu mempelajari JavaScript, Electron atau Node.js untuk dapat menggunakan paket NuGet. File JS berjalan di dalam aplikasi Anda, tetapi mereka dibuat secara otomatis oleh proses pembangunan.

Yang Anda lakukan hanyalah membangun aplikasi ASP.NET Core MVC yang cukup standar. Satu-satunya perbedaan adalah, alih-alih berjalan di browser, ia berjalan sebagai aplikasi berjendela asli. Selain hanya beberapa baris kode khusus untuk paket Electron.NET, Anda tidak perlu mempelajari apa pun di atas ASP.NET Core MVC.

Halaman ini memberikan tutorial tentang cara menggunakannya. Ini juga berisi beberapa tautan ke repositori kode sampel.

Fiodar Sazanavets
sumber
2

Necromancing.
Untuk kasus khusus aplikasi WinForms yang ada :

Ada cara - meskipun saya tidak tahu seberapa baik cara kerjanya.
Bunyinya seperti ini:
Ambil implementasi WinForms dari mono.
Porting ke .NET Core atau NetStandard.

Kompilasi ulang aplikasi WinForms Anda dengan System.Windows.Forms baru.
Perbaiki apa pun yang mungkin rusak oleh NetCore.
Doakan agar mono menerapkan bagian yang Anda butuhkan dengan sempurna.
(jika tidak, Anda selalu dapat berhenti berdoa, dan mengirim permintaan tarik ke mono-proyek dengan perbaikan / patch / fitur Anda)

Ini repo CoreFX WinForms saya:
https://github.com/ststeiger/System.CoreFX.Forms

Stefan Steiger
sumber
1

Ini pertanyaan lama, tapi ya, dimungkinkan untuk mengembangkan aplikasi desktop lintas platform (GUI), untuk Windows, Linux, dan macOS, menggunakan VSCode, .Net Core, C #, gtk3, gtksharp dan Glade sebagai GUI Designer.

Begini caranya .

Teo Bebekis
sumber
0

Jika Anda menggunakan .Net Core 3.0dan di atas melakukan langkah-langkah berikut dan Anda siap melakukannya: (Saya akan menggunakan .NET Core CLI , tetapi Anda juga dapat menggunakan Visual Studio)

  1. md MyWinFormsApp langkah opsional
  2. cd MyWinFormsApp langkah opsional
  3. dotnet new sln -n MyWinFormsApp langkah opsional, tapi itu ide yang bagus
  4. dotnet new winforms -n MyWinFormsApp Maaf, ini bukan pilihan
  5. dotnet sln add MyWinFormsApp lakukan ini jika Anda melakukan langkah # 3

Oke, Anda bisa berhenti membaca jawaban saya dan mulai menambahkan kode ke MyWinFormsAppproyek. tetapi jika Anda ingin bekerja dengan Desainer Formulir, teruslah membaca.

  1. Buka MyWinFormsApp.csprojfile dan ubah <TargetFramework>netcoreapp3.1<TargetFramework>ke <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(jika Anda menggunakan netcoreapp3.0jangan khawatir, ubah ke <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>)
  2. Kemudian tambahkan yang berikut ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

Setelah melakukan langkah-langkah ini, inilah yang seharusnya Anda hasilkan:

<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. Buka Program.csdan tambahkan preprocessor-if berikut
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Sekarang Anda dapat membuka MyWinFormsAppproyek menggunakan Visual Studio 2019 ( saya pikir Anda juga dapat menggunakan Visual Studio 2017, tetapi saya tidak yakin ) dan klik dua kali Form1.csdan Anda akan melihat ini:

masukkan deskripsi gambar di sini

Oke, buka Toolbox ( Ctrl+W,X) dan mulai menambahkan kontrol ke aplikasi Anda dan membuatnya cantik.

Anda dapat membaca lebih lanjut tentang designer @ Windows Forms .NET Core Designer

Mehdi Dehghani
sumber