.NET Core'da masaüstü GUI uygulaması yapmak mümkün müdür?


114

Birkaç yıldır Windows Forms programları geliştiriyorum. Şimdi .NET Core'a bakıyorum (ASP.NET Core MVC dahil). Yeni GUI masaüstü teknolojisini arıyorum. Visual Studio 2015 güncelleme 3'te .NET Core'da bir GUI uygulaması yapmak için herhangi bir seçenek göremiyorum.

Neyi kaçırıyorum?


Bu yeni platformu görerek açıyı değiştirmelisiniz. Mevcut tüm çerçeveler, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android, .NET Core'da yazdığınız kodu kullanabilir. Bu, çapraz platform geliştirmeyi mümkün kılar, ancak hayal ettiğiniz şekilde değil.
Lex Li

Yani, örneğin
winformlarda GUI'ler

Hayır. .NET Core üzerine kurulu paketler doğrudan referans olarak eklenebilir.
Lex Li

1
Elektron gitmenin yoludur. Bir api arkasında asp.net kullanın. Eğer kullanıcı arayüzü mantığını açık tutarsanız, uygulamanın en önemli kısmını .net üzerinde
tutabilmelisiniz

1
Profesyonel bir ipucu olarak, VS 2015'in .NET Core 2.0 araçlarına erişimi olmadığı için Visual Studio 2017'ye (mümkünse) yükseltme yapacağım veya mevcut diğer araçları (CLI ve / veya VS Code / Rider) kullanacağım. gelişiminizin ilerlemesini engeller. Yaptığınız tek şey onunla denemek olsa bile.
Jamie Taylor

Yanıtlar:


75

Hiçbir şey eksik değildin. Microsoft, .NET Core 3'e kadar GUI uygulamalarını doğrudan .NET Core kullanarak oluşturmanın makul bir yolunu sunmadı , ancak UWP (Evrensel Windows Platformu) kısmen .NET Core üzerine inşa edildi.

.NET Core 3.0, yalnızca Windows için olsa da Windows Forms ve WPF desteği içerir.

.NET 6, Windows ve macOS masaüstü uygulamalarını ve mobil uygulamaları, topluluk tarafından desteklenen (MS değil) Linux masaüstü uygulamaları ile destekleyen .NET MAUI'yi içerecektir. .NET 5, .NET MAUI'nin bir önizleme sürümünü içerecektir.

Üçüncü taraf çapraz platform seçenekleri için diğer yanıtlara bakın.


48
Aman tanrım, bu bir şok! Öyleyse, GUI içermeyen bir çapraz platform çerçevesinin amacı nedir?
EKanadily

21
@EssamGndelee Birincil nokta ASP.NET Core uygulamalarıdır. İkincil bir nokta konsol uygulamalarıdır.
svick

3
@ChristopherPainter Bulut bilişim için daha iyi destek ve geliştiricileri Node.js gibi platformlardan çekmek .Net Core'un var olmasının nedenlerinden bazıları, evet. Ancak bu, Microsoft'un şu anda yalnızca bunları önemsediği anlamına gelmez.
svick

1
@CYoung Bence Microsoft'un tavrı bunun için UWP kullanmanız gerektiği yönünde.
svick

1
@svick, bu, .NET Core'un çözmesi gereken tüm platformlar arası programlamayı tamamen ortadan kaldıracaktı. UWP yalnızca MS aile için iyi yeterince geçerli: /
walther

52

AvaloniaUI artık Windows, OS X ve Linux üzerinde .NET Core üzerinde çalıştırma desteğine sahip. XAML, bağlamalar ve kontrol şablonları dahildir.

Örneğin, Rider ile macOS üzerinde geliştirme:

  1. Avalonia dotnet yeni şablonlarını yüklemek için talimatları izleyin
  2. JetBrains Rider'ı açın ve Karşılama ekranından,
  3. Seç Yeni Çözüm (tepesine yakın → Şablonlar List ) → Daha Şablonlar → Düğme Şablon ... * → gözatmasını yükleyin dizinde 1. adımda şablonları klonlanmış.
  4. ReloadDüğmeye tıklayın
  5. Seyretmek! Avalonia Şablonları artık New SolutionŞablonlar Listesinde görünüyor!
  6. Bir Avalonia şablonu seçin
  7. Oluşturun ve çalıştırın. GUI'nin gözlerinizin önünde açıldığını görün.

JetBrains Rider'a dotnet yeni bir şablon yüklemek için GUI adımları


Bir kenara, ilgilenen herkes Jetbrains'in Rider'a Avalonia desteğini dahil etmesine oy verin: youtrack.jetbrains.com/issue/RIDER-39247
xendi

40

Electron'u kullanabilir ve Edge.js ile bağlayabilirsiniz . elektron kenarı . Edge.js, Electron'un (Node.js) .NET DLL dosyalarını çağırmasına izin verir ve bunun tersi de geçerlidir.

Bu şekilde GUI'yi HTML, CSS ve JavaScript ile ve arka ucu .NET Core ile yazabilirsiniz. Electron'un kendisi de çapraz platformdur ve Chromium tarayıcısına dayanır.


7
Ama neden elektron? Ayrıca, X bağlantı noktasında bir web uygulaması açabilir ve ardından tarayıcıyı oraya götürebilirsiniz. Electron'un yapabileceği her şeyi ve daha fazlasını içerir çünkü bu, Electron'un aksine tarayıcının her zaman en son sürümüdür. Belirli bir tarayıcı sürümüne ihtiyacınız varsa, dağıtımınıza Google-Chrome'u ekleyin.
Stefan Steiger

2
@StefanSteiger Elektron kullanmanın ve API'yi doğrudan montaj yoluyla çağırmanın, kullanıcının uygulamayı bir web uygulaması olarak görmeyeceği boşluğu dolduracağını düşünüyorum. Bazı geliştiriciler de HTTP kullanarak daha fazla iletişim katmanı eklemek istemiyor.
Brian Ng

Electron.Net bu oldukça basit görünüyor şimdi cross-platform-blog.com/electron.net/…
J. Allen

Electron.NET umut verici görünüyor, ancak onu üretimde kullanmaktan bıktım çünkü sizi üretim makinenizde güvenli olmayan bir web sunucusu açmaya zorluyor. Daha sonra, uygulamanın ASP.NET Core ucu, IIS veya nginx (veya benzeri) gibi düzgün şekilde yapılandırılmış bir ters proxy sunucusunun arkasında oturduğu sürece, daha güvenli olmalısınız.
Jamie Taylor

cehennem, uygulamayı bir mvc / webapi olarak kullanabilir, rastgele bağlantı noktasında yerel olarak barındırabilir ve yerel api'yi çağıran elektron arayüzünü kullanabilir.
Wjdavis5

31

Kullanarak, .NET Core Qt, QtQuick ve QML kullanmak artık mümkün Qml.Net .

Yüksek performanslıdır (" P / Invoke chatty" değil), tam özelliklidir ve Linux, OS X ve Windows'ta çalışır.

Şu anda mevcut diğer seçeneklerle nasıl karşılaştırıldığını görmek için blog gönderime göz atın .

Not: Yazar benim.


Çok umut verici görünüyor, araştıracağım
Daniel

21

Bir seçenek, UI için JavaScript, HTML ve CSS ile Electron kullanmak ve arka uç mantığı için bir web API'sini kendi kendine barındıracak bir .NET Core konsol uygulaması oluşturmak olabilir. Electron, localhost: xxxx üzerindeki bir hizmeti ortaya çıkaracak arka planda konsol uygulamasını başlatacaktır .

Bu şekilde, JavaScript'ten HTTP istekleriyle erişilebilir olacak şekilde tüm arka uç mantığını .NET kullanarak uygulayabilirsiniz.

Bu gönderiye bir göz atın, Electron ve .NET Core ile platformlar arası bir masaüstü uygulamasının nasıl oluşturulacağını ve GitHub'da kodun nasıl kontrol edileceğini açıklar .


20

Konsol tabanlı bir kullanıcı arabirimi oluşturmak için gui.cs kullanabilirsiniz . Açık kaynaklıdır ( Xamarin'in yaratıcısı Miguel de Icaza'dan ) ve Windows, Linux ve macOS'ta .NET Core üzerinde çalışır.

Aşağıdaki bileşenlere sahiptir:

  • Düğmeler
  • Etiketler
  • Metin girişi
  • Metin görünümü
  • Zaman düzenleme alanı
  • Radyo düğmeleri
  • Onay kutuları
  • Diyalog kutuları
    • Mesaj kutuları
  • pencereler
  • Menüler
  • ListViews
  • Çerçeveler
  • ProgressBars
  • Kaydırma görünümleri ve Kaydırma çubukları
  • Onaltılık görüntüleyici / düzenleyici (HexView)

Örnek ekran görüntüsü

gui.cs örnek çıktı ekran görüntüsü



4

Evet mümkün.

.NET Core, kutudan çıkar çıkmaz yerel GUI uygulaması için herhangi bir bileşene sahip değildir. Ancak, Gregor Biswanger'ın cevabına göre, bunun için Electron.NET adlı bir NuGet paketi var.

Electron , Node.js üzerinde yerel GUI uygulamaları oluşturmanıza izin veren bir çerçevedir. Electron.NET, Electron ve Node.js'yi .NET Core kodunuzdan kullanmanıza izin veren bir NuGet paketidir.

İyi haber şu ki, NuGet paketini kullanabilmek için JavaScript, Electron veya Node.js öğrenmek zorunda değilsiniz. JS dosyaları uygulamanızın içinde çalışır, ancak derleme işlemi tarafından otomatik olarak oluşturulurlar.

Tek yapmanız gereken oldukça standart bir ASP.NET Core MVC uygulaması oluşturmaktır. Tek fark, tarayıcıda çalıştırmak yerine yerel pencereli bir uygulama olarak çalışmasıdır. Electron.NET paketine özgü birkaç satır kodun yanı sıra, ASP.NET Core MVC üzerinde herhangi bir şey öğrenmenize gerek kalmaz.

Bu sayfa , nasıl kullanılacağına dair bir eğitim sağlar. Ayrıca, örnek kod depolarına bazı bağlantılar da içerir.


4

tl; dr - .NET Core geliştiricilerinin platformlar arası bir GUI çerçevesi sağlamasının mümkün olacağından emin değilim.

.NET Core'un eski bir sürümü için platformlar arası bir GUI çerçevesinin resmi araçlara (özellikle aracın eski bir sürümü - Visual Studio 2015 güncelleme 3'ü çalıştırdığınızı belirtiyorsunuz) dahil edilmesini beklemek gibi hissediyorum. erken.

GUI çerçeveleri gerçekten oldukça ağırdır ve ana makinede zaten mevcut olan donanım soyutlamalarına bağlıdır. Windows'ta genellikle çoğu kullanıcı tarafından kullanılan tek bir pencere yöneticisi (WM) ve masaüstü ortamı (DE) vardır, ancak desteklenen birçok farklı Linux dağıtımında, birçok olası WM ve DE vardır - çoğu kullanıcının KDE , GNOME veya Xfce ile birlikte X-Server veya Wayland kullanıyor olabilir . Ancak hiçbir Linux kurulumu eskisi gibi değildir.

Açık kaynak topluluğunun bir VM ve DE için "standart" bir kuruluma gerçekten yerleşememesi gerçeği, .NET Core geliştiricilerinin tüm platformlar ve kombinasyonlarda çalışacak bir GUI çerçevesi oluşturmasının oldukça zor olacağı anlamına gelir. DE'ler ve WM'ler.

Buradaki pek çok kişinin harika önerileri var (bir Web uygulaması oluşturmak için ASP.NET Core kullanmaktan ve bir tarayıcı kullanmaktan, bir grup çapraz platform çerçevesini listelemeye kadar). Listelenen bahsedilen çapraz platform GUI çerçevelerinden bazılarına bakarsanız, ne kadar ağır olduklarını göreceksiniz.

Ancak, Miguel de Icaza bu yıl .NET Conf'de (2017, gelecekte bunu okuyorsanız) Linux ve macOS üzerinde saf bir şekilde çalışan Xamarin'i gösterdiğinden , tünelin sonunda ışık var, bu yüzden denemeye değer olabilir o hazır olduğunda.

(Ancak .NET Core 2.0 özelliklerine erişmek için Visual Studio 2015'ten Visual Studio 2017'ye yükseltmeniz gerekir.)


linux çeşitliliği için gerekçe yok. 1. Java sorunsuz çalışır 2. Mono, WinForms'u noramlly çalıştırır (çirkin) Linux'ta GTK'yı QT tabanlı dağıtımda veya tam tersi şekilde kullanabilirsiniz. .Net çekirdeği için QT bağlamalarına sahip olmak harika olurdu.
Bogdan Mart

Söylediğin her şeye katılıyorum. Ancak, Microsoft'un yaklaşımının şu anda Azure platformu üzerinden IaaS (Hizmet Olarak Altyapı), SaaS (Hizmet Olarak Yazılım) ve PaaS (Hizmet Olarak Platform) sağlamak olduğunu düşünüyorum. Birinci taraf, açık kaynak, çapraz platform çerçevelerinin geliştiricilere öncelik olarak bu yönde işaret etmesi mantıklı olacaktır. Azure ile RHEL ve Google gibi diğer şirketlerin hem ASP NET Core'u hem de .NET Core'u desteklemek için yaptığı iş pratikte efsanevi ve .NET Core önceliğinin bunu yansıttığı anlaşılıyor.
Jamie Taylor

4

Yardımcı olabilecek bir proje üzerinde çalışıyorum: https://github.com/gkmo/CarloSharp

Aşağıdaki uygulama, HTML, JavaScript ve CSS (Angular) olarak UI ile .NET'te yazılmıştır.

Buraya resim açıklamasını girin


2
Lütfen HTML yok.
Richard Lalancette

1
@Richard Lalancette: Neden? Detaylandırır mısın Visual Studio Code buna bir örnek değil mi?
Peter Mortensen

Masaüstü uygulaması için sadece korkunç bir teknoloji. Açıkçası, istediğiniz performans seviyesine ve kaliteye bağlıdır.
Richard Lalancette

3

.NET Core ve MVC ile bir web uygulaması geliştirebilir ve bunu bir Windows evrensel JavaScript uygulamasında kapsülleyebilirsiniz: Windows'ta Aşamalı Web Uygulamaları

Hala bir web uygulamasıdır, ancak yeni bir çerçeve öğrenmeden veya / ve kullanıcı arayüzünü yeniden geliştirmeden bir web uygulamasını bir masaüstü uygulamasına dönüştürmenin çok hafif bir yolu ve harika çalışıyor.

Rahatsızlık benzemez Electron veya ReactXP sonucu evrensel bir Windows uygulaması ve bir çapraz platform masaüstü uygulamasıdır, mesela.


2

Mevcut Windows Forms uygulamalarının özel durumu için :

Bir yolu var - ne kadar iyi çalıştığını bilmesem de.
Şöyle devam ediyor:
Windows Forms uygulamasını Mono'dan alın .
Bunu .NET Core veya NetStandard'a taşıyın.

Windows Forms uygulamalarınızı yeni System.Windows.Forms'a karşı yeniden derleyin.
.NET Core tarafından kırılmış olabilecek her şeyi düzeltin.
Mono'nun ihtiyacınız olan parçaları kusursuz bir şekilde uygulaması için dua edin.
(Aksi takdirde, dua etmeyi her zaman durdurabilir ve Mono projesine düzeltme / yama / özelliğinizle bir çekme isteği gönderebilirsiniz.)

İşte CoreFX Windows Forms depom:
https://github.com/ststeiger/System.CoreFX.Forms


2

Evet, GUI tasarımcısı olarak Visual Studio Code, .NET Core, C #, GTK 3 , gtksharp ve Glade kullanarak Windows, Linux ve macOS için platformlar arası masaüstü (GUI) uygulamaları geliştirmek mümkündür .

İşte nasıl .


0

.NET Core 3.0 ve üstünü kullanıyorsanız, aşağıdaki adımları uygulayın ve gitmeniz iyi olur: ( .NET Core CLI kullanacağım , ancak Visual Studio'yu da kullanabilirsiniz):

  1. md MyWinFormsApp isteğe bağlı adım
  2. cd MyWinFormsApp isteğe bağlı adım
  3. dotnet new sln -n MyWinFormsApp isteğe bağlı adım, ancak bu iyi bir fikir
  4. dotnet new winforms -n MyWinFormsApp Üzgünüm bu isteğe bağlı değil
  5. dotnet sln add MyWinFormsApp 3. adımı gerçekleştirdiyseniz bunu yapın

Tamam, cevabımı okumayı bırakıp MyWinFormsAppprojeye kod eklemeye başlayabilirsiniz . Ancak Form Designer ile çalışmak istiyorsanız okumaya devam edin.

  1. MyWinFormsApp.csprojdosya ve değişim <TargetFramework>netcoreapp3.1<TargetFramework>için <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>kullandığınız takdirde ( netcoreapp3.0do not endişe. Değiştirin bunu için<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks> )
  2. Ardından aşağıdakileri ekleyin ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

Bu adımları uyguladıktan sonra yapmanız gereken şey şudur:

<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. Program.cs dosyasını açın ve aşağıdaki ön işlemciyi ekleyin -if
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Artık MyWinFormsAppprojeyi Visual Studio 2019 kullanarak açabilirsiniz ( bence Visual Studio 2017'yi de kullanabilirsiniz, ancak emin değilim ) ve çift tıklayın Form1.csve şunu görmelisiniz:

Buraya resim açıklamasını girin

Tamam, Araç Kutusu'nu açın ( Ctrl+ W,X ) açın ve uygulamanıza kontroller eklemeye başlayın ve güzelleştirin.

Windows Forms .NET Core Designer'da tasarımcı hakkında daha fazla bilgi edinebilirsiniz .


0

Windows Forms (ve görsel tasarımcısı), Visual Studio 2019 16.6'dan beri .NET Core (önizleme olarak) için kullanıma sunulmuştur. Oldukça iyi, ancak bazen can sıkıcı hataların üstesinden gelmek için Visual Studio 2019 16.7 Önizleme'yi açmam gerekiyor.

Şu blog gönderisine bakın: .NET Core için Windows Forms Designer Yayınlandı

Ayrıca, Windows Forms artık açık kaynak: https://github.com/dotnet/winforms


Ancak yalnızca Windows'ta, Linux'ta (?). Bu asla söylenmez.
Peter Mortensen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.