Có thể tạo ứng dụng GUI trên máy tính để bàn trong lõi .NET không?


101

Tôi đã phát triển các chương trình WinForms trong vài năm. Bây giờ tôi đang xem xét .NET Core (bao gồm cả ASP.NET Core MVC). Tôi đang tìm kiếm công nghệ máy tính để bàn GUI mới. Trong Visual Studio 2015 update 3, tôi không thể thấy bất kỳ tùy chọn nào để tạo ứng dụng GUI trong .NET Core. Tôi đang thiếu gì?


Bạn nên thay đổi góc nhìn nền tảng mới này. Mọi khuôn khổ hiện có, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android đều có thể sử dụng mã bạn viết trên .NET Core. Điều đó cho phép phát triển đa nền tảng, không giống như cách bạn tưởng tượng.
Lex Li

Vì vậy, bạn đang nói rằng tôi có thể xây dựng GUI trong -ví example- winforms và mã kết thúc trở lại trong lõi .net
EKanadily

Không. Các gói được xây dựng trên .NET Core có thể được thêm trực tiếp dưới dạng tham chiếu.
Lex Li

1
Electron là con đường để đi. Sử dụng asp.net đằng sau một api. Nếu bạn giữ cho ánh sáng ui logic, bạn sẽ có thể để giữ cho các bộ phận quan trọng nhất của ứng dụng trên .net
user7558114

1
Theo một mẹo chuyên nghiệp, tôi sẽ nâng cấp lên Visual Studio 2017 (nếu có thể) hoặc sử dụng các công cụ khác có sẵn (CLI và / hoặc VS Code / Rider) vì VS 2015 không có quyền truy cập vào công cụ .NET Core 2.0, điều này sẽ cản trở sự phát triển của bạn trong tương lai. Ngay cả khi tất cả những gì bạn đang làm là thử nghiệm nó.
Jamie Taylor

Câu trả lời:


64

Bạn đã không thiếu bất cứ điều gì. MS không có cách nào hợp lý để tạo các ứng dụng GUI trực tiếp bằng .Net Core cho đến .Net Core 3, mặc dù UWP (Universal Windows Platform) được xây dựng một phần dựa trên .Net Core.

.Net Core 3.0 bao gồm hỗ trợ cho Winforms và WPF, mặc dù nó chỉ dành cho Windows.

.Net 6 sẽ bao gồm .Net MAUI, sẽ hỗ trợ ứng dụng máy tính để bàn Windows và macOS và các ứng dụng di động, với các ứng dụng máy tính để bàn Linux được hỗ trợ bởi cộng đồng (không phải MS). .Net 5 sẽ bao gồm phiên bản xem trước của .Net MAUI.

Để biết các tùy chọn nền tảng chéo đã xuất hiện trong 2 năm qua, hãy xem các câu trả lời khác.


41
omg, đó là một cú sốc! vậy điểm của một khung nền tảng chéo không có GUI là gì?
EKanadily

19
@EssamGndelee Điểm chính là các ứng dụng ASP.NET Core. Một điểm phụ là các ứng dụng giao diện điều khiển.
svick

3
@ChristopherPainter Hỗ trợ tốt hơn cho điện toán đám mây và thu hút các nhà phát triển từ các nền tảng như Node.js là một số lý do tại sao .Net Core tồn tại, vâng. Nhưng điều đó không có nghĩa là bây giờ Microsoft chỉ quan tâm đến những điều đó.
svick

1
@CYoung Tôi nghĩ lập trường của Microsoft là bạn nên sử dụng UWP cho việc đó.
svick

1
@svick, điều đó sẽ loại bỏ hoàn toàn bất kỳ chương trình đa nền tảng nào mà .NET Core phải giải quyết. UWP là đủ tốt chỉ cho MS gia đình: /
Walther

41

Bạn có thể sử dụng Electron và kết nối nó với Edge.js resp. cạnh electron . Edge.js cho phép electron (node.js) gọi .net dll's và ngược lại. Bằng cách này, bạn có thể viết GUI với HTML, CSS và JavaScript và phần phụ trợ với lõi .net. Bản thân Electron cũng là nền tảng chéo và dựa trên trình duyệt crôm.


5
Nhưng tại sao lại là electron? Bạn cũng có thể chỉ cần mở một ứng dụng web trên cổng X và sau đó điều hướng trình duyệt đến đó. Bao gồm mọi thứ mà Electron có thể và hơn thế nữa vì đó luôn là phiên bản mới nhất của trình duyệt - không giống như Electron. Nếu bạn cần một phiên bản trình duyệt cụ thể, hãy đưa Google-Chrome vào bản phân phối của bạn.
Stefan Steiger

1
@StefanSteiger Tôi nghĩ rằng việc sử dụng điện tử và cũng gọi API trực tiếp thông qua lắp ráp sẽ lấp đầy khoảng trống mà người dùng sẽ không xem ứng dụng như một ứng dụng web. Và một số nhà phát triển không muốn thêm nhiều lớp giao tiếp bằng HTTP.
Brian Ng

Electron.Net trông như thế này là khá đơn giản bây giờ cross-platform-blog.com/electron.net/...
J. Allen

Electron.NET trông có vẻ hứa hẹn, nhưng tôi sẽ chán sử dụng nó trong sản xuất vì nó buộc bạn phải mở một máy chủ web không an toàn trên máy sản xuất của mình. Sau đó, một lần nữa, miễn là phần cuối ASP.NET Core của ứng dụng được đặt phía sau máy chủ proxy ngược được định cấu hình đúng như IIS hoặc nginx (hoặc tương tự), thì bạn sẽ an toàn hơn.
Jamie Taylor

hell có thể chỉ là ứng dụng dưới dạng mvc / webapi, lưu trữ cục bộ trên cổng ngẫu nhiên và sử dụng giao diện electron gọi api cục bộ.
Wjdavis5

40

AvaloniaUI hiện đã hỗ trợ chạy trên .NET Core trên Win / OSX / Linux. XAML, ràng buộc và mẫu điều khiển bao gồm.

ví dụ để phát triển trên MacO với Rider:

  1. Làm theo hướng dẫn để cài đặt các mẫu mới của Avalonia dotnet
  2. Mở JetBrains Rider và từ màn hình Chào mừng,
  3. Chọn New Solution-> (Gần đầu Danh sách Mẫu) -> More Templates-> Nút Install Template...-> duyệt đến thư mục mà bạn đã sao chép các mẫu ở bước 1.
  4. Nhấp vào Reloadnút
  5. Hãy chứng kiến! Mẫu Avalonia hiện đã xuất hiện trong New SolutionDanh sách Mẫu!
  6. Chọn một mẫu Avalonia
  7. Xây dựng và chạy. Xem GUI mở ra trước mắt bạn.

Các bước GUI để cài đặt mẫu dotnet mới vào JetBrains Rider


30

Bây giờ có thể sử dụng Qt / QtQuick / QML với .NET Core, sử dụng Qml.Net .

Nó có hiệu suất cao (không phải "pinvoke chatty"), có đầy đủ tính năng và hoạt động trên Linux / OSX / Windows.

Kiểm tra bài đăng trên blog của tôi để xem nó như thế nào so với các tùy chọn khác hiện có.

Tái bút: Tôi là tác giả.


Nó trông rất hứa hẹn, tôi sẽ xem xét nó
Daniel

22

Một tùy chọn sẽ là sử dụng Electron với JavaScript, HTML và CSS cho giao diện người dùng và xây dựng một ứng dụng bảng điều khiển .Net Core sẽ tự lưu trữ một api web cho logic back-end. Electron sẽ khởi động ứng dụng bảng điều khiển trên nền sẽ hiển thị một dịch vụ trên localhost: xxxx.

Bằng cách này, bạn có thể triển khai tất cả logic back-end bằng .Net để có thể truy cập thông qua các yêu cầu HTTP từ JavaScript.

Hãy xem bài đăng này, nó giải thích cách tạo ứng dụng máy tính để bàn đa nền tảng với Electron và .Net Core và kiểm tra mã trên github


17

Để tạo giao diện điều khiển dựa trên giao diện người dùng, bạn có thể sử dụng gui.cs . Nó là mã nguồn mở (của Miguel, người tạo ra Xamarin) và chạy trên .Net core trên Windows, Linux và MacOs.

Nó có các thành phần sau:

  • nút
  • Nhãn
  • Nhập văn bản
  • Chế độ xem văn bản
  • Trường chỉnh sửa thời gian
  • Các nút radio
  • Hộp kiểm
  • Những hộp thoại
    • Hộp tin nhắn
  • các cửa sổ
  • Thực đơn
  • ListViews
  • Khung
  • ProgressBars
  • Chế độ xem cuộn và Thanh cuộn
  • Trình xem / chỉnh sửa hệ thập lục phân (HexView)

Ảnh chụp màn hình mẫu

Ảnh chụp màn hình đầu ra mẫu gui.cs


16

chúng tôi đã mã hóa một giải pháp mã nguồn mở cho điện tử với lõi .net: Electron.NET . https://github.com/ElectronNET/Electron.NET

Thưởng thức!


15
Điều gì là ảm đạm. Nếu tôi muốn có một trang HTML, tôi sẽ tạo một trang HTML. Tôi muốn thứ gì đó tương tác với máy tính để bàn tốt hơn thế này.
Joshua


4

tl; dr - Tôi không chắc rằng các nhà phát triển .NET Core có thể cung cấp khung GUI đa nền tảng hay không.

Tôi cảm thấy như mong đợi một khung GUI đa nền tảng được đưa vào công cụ chính thức (đặc biệt là phiên bản cũ của công cụ - bạn đề cập rằng bạn đang chạy VS 2015 update 3) cho phiên bản đầu tiên của .NET Core là hơi sớm.

Khung GUI thực sự khá nặng và phụ thuộc vào phần cứng trừu tượng đã có trên máy chủ. Trên Windows thường có một trình quản lý cửa sổ duy nhất (WM) và môi trường máy tính để bàn (DE) được hầu hết người dùng sử dụng, nhưng trên nhiều bản phân phối khác nhau của Linux được hỗ trợ, có bất kỳ số lượng WM và DE có thể có - hầu hết người dùng sẽ đang sử dụng X-Server hoặc Wayland kết hợp với KDE, Gnome hoặc XFCE. Nhưng không bao giờ cài đặt Linux nào giống nhau.

Thực tế là cộng đồng nguồn mở không thể thực sự giải quyết được thiết lập "tiêu chuẩn" cho VM và DE có nghĩa là sẽ khá khó khăn cho các nhà phát triển .NET Core để tạo một khung GUI hoạt động trên tất cả các nền tảng và sự kết hợp của DE và WM.

Rất nhiều người ở đây có một số gợi ý tuyệt vời (từ việc sử dụng ASP.NET Core để xây dựng ứng dụng Web và sử dụng trình duyệt cho đến liệt kê một loạt các khung nền tảng chéo). Nếu bạn xem một số khung GUI đa nền tảng được đề cập được liệt kê, bạn sẽ thấy chúng nặng như thế nào.

Tuy nhiên, có ánh sáng ở cuối đường hầm khi Miguel de Icaza cho thấy Xamarin chạy thuần túy trên Linux và MacOS tại .NET Conf năm nay (2017, nếu bạn đang đọc điều này trong tương lai), vì vậy nó có thể đáng thử khi nó đã sẵn sàng.

(nhưng bạn sẽ cần nâng cấp từ VS 2015 lên VS 2017 để truy cập các tính năng .NET Core 2.0)


không có lý do cho sự đa dạng của linux. 1. Java chạy mượt mà 2. Mono chạy WinForms noramlly (bạn xấu quá) Trong linux, bạn có thể sử dụng GTK trên bản phân phối dựa trên QT và ngược lại. Thật tuyệt khi có các ràng buộc QT cho lõi .net.
Bogdan Mart

Tôi đồng ý với tất cả những gì bạn nói. Tuy nhiên, tôi cảm thấy rằng cách tiếp cận của Microsoft là cung cấp IaaS (Cơ sở hạ tầng như một dịch vụ), SaaS (Phần mềm như một dịch vụ) và PaaS (Nền tảng như một dịch vụ) thông qua nền tảng Azure của họ vào lúc này. Sẽ có ý nghĩa rằng bên thứ nhất, mã nguồn mở, khung nền tảng chéo của họ sẽ hướng các nhà phát triển theo hướng đó là ưu tiên. Công việc mà Azure và các công ty khác như RHEL và Google đang thực hiện để hỗ trợ cả ASP NET Core và .NET Core trên thực tế đã trở thành huyền thoại và nó có ý nghĩa rằng mức độ ưu tiên dành cho .NET Core dường như phản ánh điều đó.
Jamie Taylor,


3

Bạn có thể phát triển một ứng dụng web với .NET Core và MVC và đóng gói nó trong một ứng dụng JavaScript phổ biến của Windows: https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

Nó vẫn là một ứng dụng web nhưng đó là một cách rất nhẹ để chuyển đổi một ứng dụng web thành một ứng dụng dành cho máy tính để bàn mà không cần học một khuôn khổ mới hoặc / và phát triển lại giao diện người dùng và nó hoạt động rất tốt.

Ví dụ, không giống như electron hoặc ReactXP , kết quả là ứng dụng Windows phổ biến chứ không phải ứng dụng máy tính để bàn đa nền tảng.


2

Có, nó là có thể.

.NET Core không có bất kỳ thành phần nào cho ứng dụng GUI gốc. Tuy nhiên, có một gói NuGet cho nó được gọi là Electron.NET , theo câu trả lời của Gregor Biswanger.

Electron là một khuôn khổ cho phép bạn xây dựng các ứng dụng GUI gốc trên Node.js. Electron.NET là một gói NuGet cho phép bạn sử dụng Electron và Node.js từ bên trong mã .NET Core của bạn.

Tin tốt là bạn không cần phải học JavaScript, Electron hoặc Node.js để có thể sử dụng gói NuGet. Các tệp JS chạy bên trong ứng dụng của bạn, nhưng chúng được tạo tự động bởi quá trình xây dựng.

Tất cả những gì bạn làm là xây dựng một ứng dụng ASP.NET Core MVC khá chuẩn. Sự khác biệt duy nhất là, thay vì chạy trong trình duyệt, nó chạy như một ứng dụng cửa sổ gốc. Ngoài một vài dòng mã cụ thể cho gói Electron.NET, bạn sẽ không cần phải học bất cứ điều gì ở trên ASP.NET Core MVC.

Trang này cung cấp một hướng dẫn về cách sử dụng nó. Nó cũng chứa một số liên kết đến kho mã mẫu.


2

Thăng bằng.
Đối với trường hợp đặc biệt của các ứng dụng WinForms hiện có :

Có một cách - mặc dù tôi không biết nó hoạt động tốt như thế nào.
Nó diễn ra như thế này:
Thực hiện WinForms từ mono.
Chuyển nó sang .NET Core hoặc NetStandard.

Biên dịch lại các ứng dụng WinForms của bạn với System.Windows.Forms mới.
Sửa mọi thứ có thể bị hỏng bởi NetCore.
Cầu nguyện rằng mono thực hiện các phần bạn cần một cách hoàn hảo.
(nếu không, bạn luôn có thể ngừng cầu nguyện và gửi cho dự án đơn một yêu cầu kéo với bản sửa lỗi / bản vá / tính năng của bạn)

Đây là bản repo CoreFX WinForms của tôi:
https://github.com/ststeiger/System.CoreFX.Forms


2

Đó là một câu hỏi cũ, nhưng có, có thể phát triển các ứng dụng máy tính để bàn (GUI) đa nền tảng, dành cho Windows, Linux và macOS, sử dụng VSCode, .Net Core, C #, gtk3, gtksharp và Glade dưới dạng GUI Designer.

Đây là cách làm .


0

Nếu bạn đang sử dụng .Net Core 3.0trở lên, hãy thực hiện các bước sau và bạn đã sẵn sàng: (Tôi sẽ sử dụng .NET Core CLI , nhưng bạn cũng có thể sử dụng Visual Studio)

  1. md MyWinFormsApp bước tùy chọn
  2. cd MyWinFormsApp bước tùy chọn
  3. dotnet new sln -n MyWinFormsApp bước tùy chọn, nhưng đó là ý kiến ​​hay
  4. dotnet new winforms -n MyWinFormsApp Tôi xin lỗi, đây không phải là tùy chọn
  5. dotnet sln add MyWinFormsApp làm điều này nếu bạn đã làm bước # 3

Được rồi, bạn có thể ngừng đọc câu trả lời của tôi và bắt đầu thêm mã vào MyWinFormsAppdự án. nhưng nếu bạn muốn làm việc với Form Designer, hãy đọc tiếp.

  1. Mở MyWinFormsApp.csprojtệp và thay đổi <TargetFramework>netcoreapp3.1<TargetFramework>thành <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(nếu bạn đang sử dụng, netcoreapp3.0đừng lo lắng, hãy thay đổi nó thành <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>)
  2. Sau đó, thêm sau ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

Sau khi thực hiện các bước này, đây là những gì bạn nên kết thúc:

<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. Mở Program.csvà thêm bộ tiền xử lý sau -if
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Bây giờ bạn có thể mở MyWinFormsAppdự án bằng Visual Studio 2019 ( tôi nghĩ bạn cũng có thể sử dụng Visual Studio 2017, nhưng tôi không chắc ) và nhấp đúp vào Form1.csvà bạn sẽ thấy điều này:

nhập mô tả hình ảnh ở đây

Được rồi, hãy mở Hộp công cụ ( Ctrl+W,X) và bắt đầu thêm các điều khiển vào ứng dụng của bạn và làm cho nó đẹp.

Bạn có thể đọc thêm về designer @ Windows Forms .NET Core Designer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.