Чи можна зробити програму графічного інтерфейсу для робочого столу в .NET core?


103

Я розробляю програми WinForms кілька років. Зараз я розглядаю .NET Core (включаючи ASP.NET Core MVC). Я шукаю нову технологію графічного інтерфейсу користувача. У Visual Studio 2015 оновлення 3 я не бачу жодного варіанту створення програми графічного інтерфейсу в .NET Core. Чого мені не вистачає?


Вам слід змінити кут огляду цієї нової платформи. Кожен існуючий фреймворк, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android, може використовувати код, який ви пишете на .NET Core. Це дає змогу розвивати крос-платформну платформу, але не так, як ви собі уявляєте.
Lex Li

Отже, ви кажете, що я можу будувати графічні інтерфейси в
-наприклад- winforms

немає. Пакети, побудовані на .NET Core, можна додавати як посилання безпосередньо.
Lex Li

1
Електрон - це шлях. Використовуйте asp.net за API. Якщо ви зберігаєте світло інтерфейсу користувача, ви зможете зберегти найважливішу частину програми на .net
user7558114

1
В якості професійної підказки я б перейшов на Visual Studio 2017 (якщо це можливо) або скористався іншими доступними інструментами (CLI та / або VS Code / Rider), оскільки VS 2015 не має доступу до інструментів .NET Core 2.0, що дозволить заважати вашому розвитку вперед. Навіть якщо все, що ви робите, - це експериментувати з цим.
Джеймі Тейлор,

Відповіді:


66

Ви нічого не пропустили. MS не поставляла розумного способу створювати графічні програми безпосередньо за допомогою .Net Core до .Net Core 3, хоча UWP (Універсальна платформа Windows) частково побудована поверх .Net Core.

.Net Core 3.0 включає підтримку Winforms та WPF, хоча це лише для Windows.

.Net 6 включатиме .Net MAUI, який підтримуватиме настільні додатки для Windows та macOS та мобільні додатки, а настільні додатки Linux підтримуватиме спільнота (а не MS). .Net 5 включатиме попередню версію .Net MAUI.

Інформацію щодо варіантів сторонніх платформ див. У інших відповідях.


42
omg, це шок! отже, який сенс у крос-платформенній структурі, яка не має графічного інтерфейсу?
EKanadily

19
@EssamGndelee Основною точкою є програми ASP.NET Core. Другорядною точкою є консольні програми.
свик

3
@ChristopherPainter Краща підтримка хмарних обчислень та залучення розробників з таких платформ, як Node.js, є одними з причин, чому існує .Net Core, так. Але це не означає, що Microsoft піклується лише про тих, хто зараз.
svick

1
@CYoung Я думаю, що позиція Microsoft полягає в тому, що для цього слід використовувати UWP.
свик

1
@svick, що повністю усуне будь-яке міжплатформене програмування, яке було вирішено .NET Core. UWP достатньо хороший лише для сім'ї MS: /
walther

43

AvaloniaUI тепер має підтримку запуску поверх .NET Core на Win / OSX / Linux. XAML, прив’язки та шаблони управління включені.

наприклад, розробляти на MacO з Rider:

  1. Дотримуйтесь інструкцій, щоб встановити нові шаблони Avalonia dotnet
  2. Відкрийте JetBrains Rider і на екрані привітання,
  3. Виберіть New Solution-> (вгорі списку шаблонів) -> More Templates-> Кнопка Install Template...-> перейдіть до каталогу, де ви клонували шаблони на кроці 1.
  4. Натисніть Reloadкнопку
  5. Ось! Шаблони Avalonia тепер з’являються у списку New Solutionшаблонів!
  6. Виберіть шаблон Avalonia
  7. Побудуйте і запустіть. Подивіться, що графічний інтерфейс відкритий на ваших очах.

Крок графічного інтерфейсу, щоб встановити новий шаблон dotnet у JetBrains Rider


Окрім того, будь-хто, хто зацікавлений, проголосуйте за те, щоб Jetbrains включила підтримку Avalonia
xendi

41

Ви можете використовувати Electron і підключити його за допомогою Edge.js відповідно. електрон-ребро . Edge.js дозволяє електрону (node.js) викликати DLL-файли .net і навпаки. Таким чином, ви можете писати графічний інтерфейс із HTML, CSS та JavaScript, а бекенд - із .net ядром. Сам Electron також є крос-платформним і базується на браузері Chrome.


5
Але чому саме електрон? Ви також можете просто відкрити веб-програму на порту X, а потім перейти до браузера. Включає все, що може Electron, і більше, тому що це завжди остання версія браузера - на відміну від Electron. Якщо вам потрібна конкретна версія браузера, включіть Google-Chrome до свого розповсюдження.
Stefan Steiger

1
@StefanSteiger Я думаю, що використання електрона, а також виклик API безпосередньо через збірку заповнить прогалину в тому, що користувач не буде бачити додаток як веб-додаток. А деякі розробники не хочуть додавати більше рівня зв'язку за допомогою HTTP.
Brian Ng

Electron.Net виглядає так, як зараз це досить просто. Cross-platform-blog.com/electron.net/…
Дж. Аллен

Електрон. Знову ж таки, поки кінець програми ASP.NET Core розміщений за правильно налаштованим зворотним проксі-сервером, таким як IIS або nginx (або подібний), ви повинні бути в безпеці.
Джеймі Тейлор,

пекло, міг просто додаток як mvc / webapi, розміщувати локально на випадковому порту та використовувати електронний інтерфейс, що викликає локальний api.
Wjdavis5,

30

Тепер можна використовувати Qt / QtQuick / QML з .NET Core, використовуючи Qml.Net .

Він є високопродуктивним (не "чітко розмовляє"), повнофункціональний і працює в Linux / OSX / Windows.

Перегляньте мою публікацію в блозі, щоб побачити, як вона порівнюється з іншими варіантами, які існують на даний момент.

PS: Я автор.


Це виглядає дуже багатообіцяючим, я розгляну це
Даніель

22

Одним із варіантів буде використання Electron з JavaScript, HTML та CSS для інтерфейсу користувача та побудова консольного додатка .Net Core, який буде самостійно розміщувати веб-API для внутрішньої логіки. Electron запустить консольний додаток у фоновому режимі, який відкриє службу на localhost: xxxx.

Таким чином ви можете реалізувати всю внутрішню логіку, використовуючи .Net, щоб отримати доступ через HTTP-запити з JavaScript.

Погляньте на цю публікацію, вона пояснює, як створити міжплатформовий настільний додаток за допомогою Electron та .Net Core та перевірити код на github


17

Для створення консолі на основі призначеного для користувача інтерфейсу, ви можете використовувати gui.cs . Він із відкритим кодом (від Мігеля, творця Xamarin) і працює на ядрі .Net у Windows, Linux та MacO.

Він має такі компоненти:

  • Кнопки
  • Етикетки
  • Введення тексту
  • Перегляд тексту
  • Поле редагування часу
  • Перемикачі
  • Прапорці
  • Діалогові вікна
    • Поля повідомлень
  • Windows
  • Меню
  • ListViews
  • Рамки
  • Бари прогресу
  • Види прокрутки та смуги прокрутки
  • Шістнадцятковий переглядач / редактор (HexView)

Зразок знімка екрана

зразок виводу знімка gui.cs



6

.NET Core 3 матиме підтримку для створення настільних програм Windows. Я дивився демонстрацію технології вчора під час .NET конференції. Це єдиний допис у блозі, який я зміг знайти, але ілюструє суть: https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows- настільні програми /


4

tl; д-р - Я не впевнений, що розробники .NET Core можуть забезпечити крос-платформний графічний інтерфейс.

Я відчуваю, що очікую, що міжплатформова фреймворк графічного інтерфейсу буде включена в офіційний інструментарій (особливо стара версія інструментарію - ви згадуєте, що у вас запущено оновлення VS 2015 3) для ранньої версії .NET Core трохи передчасно.

Фреймворки графічного інтерфейсу дійсно досить важкі і залежать від апаратних абстракцій, які вже є на хост-машині. У Windows, як правило, використовується єдиний віконний менеджер (WM) та робоче середовище (DE), що використовується більшістю користувачів, але у багатьох різних дистрибутивах Linux, які підтримуються, існує будь-яка кількість можливих WM і DE - надається більшості користувачів. використовувати X-Server або Wayland у поєднанні з KDE, Gnome або XFCE. Але жодна інсталяція Linux не однакова.

Той факт, що спільнота з відкритим кодом насправді не може зупинитися на "стандартній" установці для VM і DE, означає, що розробникам .NET Core буде досить складно створити графічний інтерфейс, який буде працювати на всіх платформах та комбінаціях DE та WM.

Багато людей тут мають декілька чудових пропозицій (від використання ASP.NET Core для створення веб-додатків та використання браузера для переліку групи крос-платформних фреймворків). Якщо ви подивитесь на деякі згадані перелічені межплатформенні графічні інтерфейси, то побачите, наскільки вони важкі.

Однак у кінці тунелю є світло, оскільки Мігель де Ікаса продемонстрував Xamarin, який наївно працює на Linux та MacOS у .NET Conf цього року (2017, якщо ви читаєте це в майбутньому), тому, можливо, варто спробувати що коли воно буде готове.

(але вам потрібно оновити з VS 2015 до VS 2017, щоб отримати доступ до функцій .NET Core 2.0)


відсутність аргументів щодо різноманітності Linux. 1. Java працює гладко 2. Mono запускає WinForms noramlly (ти некрасивий) У Linux ви можете використовувати GTK на дистрибутиві, заснованому на QT, і навпаки. Було б круто мати прив’язки QT для ядра .net.
Богдан Март

Я погоджуюся з усім, що ви говорите. Однак я вважаю, що підхід Microsoft полягає у наданні IaaS (Інфраструктура як послуга), SaaS (Програмне забезпечення як послуга) та PaaS (Платформа як послуга) через свою платформу Azure на даний момент. Мало б сенс, що їхня перша сторона, відкрита кодова платформа, що спрямовує різні платформи, вказувала б розробникам у цьому напрямку як пріоритет. Робота, яку Azure та інші компанії, такі як RHEL та Google, виконують для підтримки як ASP NET Core, так і .NET Core, є практично легендарною, і має сенс, що пріоритет .NET Core, здається, відображає це.
Джеймі Тейлор,


3

Ви можете розробити веб-додаток із .NET Core та MVC та інкапсулювати його в універсальному додатку JavaScript для Windows: https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows

Це все ще веб-програма, але це дуже легкий спосіб перетворити веб-програму на настільну програму, не вивчаючи нову структуру або / і переробити інтерфейс, і це чудово працює.

Незручності, на відміну від електронних чи ReactXP, наприклад, є універсальним додатком для Windows, а не крос-платформним настільним додатком.


2

Так, це можливо.

.NET Core не має жодних компонентів для власного графічного інтерфейсу. Однак для нього існує пакет NuGet, який називається Electron.NET , відповідно до відповіді Грегора Бісвангера.

Electron - це фреймворк, який дозволяє створювати власні програми з графічним інтерфейсом поверх Node.js. Electron.NET - це пакет NuGet, який дозволяє використовувати Electron та Node.js із коду .NET Core.

Хороша новина полягає в тому, що вам не потрібно вивчати JavaScript, Electron або Node.js, щоб мати можливість використовувати пакет NuGet. Файли JS працюють всередині вашої програми, але вони автоматично генеруються в процесі збірки.

Все, що вам потрібно - це створити досить стандартний додаток ASP.NET Core MVC. Єдина відмінність полягає в тому, що замість того, щоб працювати в браузері, він працює як рідна віконна програма. Окрім лише декількох рядків коду, специфічного для пакета Electron.NET, вам не потрібно буде вивчати щось вище ASP.NET Core MVC.

Ця сторінка містить посібник з використання. Він також містить кілька посилань на зразки сховищ коду.


2

Некромантування.
Для окремого випадку існуючих програм WinForms :

є спосіб - хоча я не знаю, наскільки це працює.
Це приблизно так:
Візьміть реалізацію WinForms з mono.
Перенесіть його на .NET Core або NetStandard.

Перекомпілюйте свої програми WinForms проти нового System.Windows.Forms.
Виправте все, що може зламати NetCore.
Моліться, щоб моно бездоганно реалізував потрібні вам деталі.
(якщо цього не сталося, ви завжди можете припинити молитися і надіслати монопроекту запит на витяг із вашим виправленням / виправленням / функцією)

Ось моє репозиторій CoreFX WinForms:
https://github.com/ststeiger/System.CoreFX.Forms


1

Це давнє запитання, але так, можна розробляти крос-платформні настільні програми (GUI) для Windows, Linux та macOS, використовуючи VSCode, .Net Core, C #, gtk3, gtksharp та Glade як GUI Designer.

Ось як .


0

Якщо ви використовуєте .Net Core 3.0і вище, виконайте наступні кроки, і ви готові піти: (Я збираюся використовувати .NET Core CLI , але ви також можете використовувати Visual Studio)

  1. md MyWinFormsApp необов’язковий крок
  2. cd MyWinFormsApp необов’язковий крок
  3. dotnet new sln -n MyWinFormsApp необов’язковий крок, але це гарна ідея
  4. dotnet new winforms -n MyWinFormsApp Вибачте, це не є обов’язковим
  5. dotnet sln add MyWinFormsApp зробіть це, якщо ви зробили крок No3

Добре, ти можеш перестати читати мою відповідь і почати додавати код до MyWinFormsAppпроекту. але якщо ви хочете працювати з конструктором форм, продовжуйте читати.

  1. Відкрийте MyWinFormsApp.csprojфайл і змініть <TargetFramework>netcoreapp3.1<TargetFramework>на <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>(якщо ви netcoreapp3.0не хвилюєтесь, змініть його на <TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>)
  2. Потім додайте наступне ItemGroup
  <ItemGroup Condition="'$(TargetFramework)' == 'net472'">
    <Compile Update="Form1.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="Form1.Designer.cs">
      <DependentUpon>Form1.cs</DependentUpon>
    </Compile>
  </ItemGroup>

Після виконання цих кроків ось що вам слід закінчити:

<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та додайте наступний препроцесор if
#if NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Тепер ви можете відкрити MyWinFormsAppпроект за допомогою Visual Studio 2019 ( я думаю, ви також можете використовувати Visual Studio 2017, але я не впевнений ) і двічі клацнути на, Form1.csі ви повинні побачити це:

введіть тут опис зображення

Добре, відкрийте Панель інструментів ( Ctrl+W,X) і почніть додавати елементи керування у свій додаток, щоб зробити його гарним.

Ви можете прочитати більше про дизайнер @ Windows Forms .NET Core Designer

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.