Можно ли сделать настольное приложение с графическим интерфейсом пользователя в ядре .NET?


110

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


Вам следует изменить угол обзора этой новой платформы. Все существующие платформы, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android, могут использовать код, который вы пишете на .NET Core. Это делает возможной кроссплатформенную разработку, но не так, как вы себе представляете.
Лекс Ли

Итак, вы говорите, что я могу создавать графические интерфейсы, например, в winforms и код серверной части в ядре .net
EKanadily

нет. Пакеты, построенные на .NET Core, можно добавлять напрямую в качестве ссылок.
Лекс Ли

1
Электрон - это то, что нужно. Используйте asp.net за api. Если вы сохраните индикатор логики пользовательского интерфейса, вы сможете сохранить наиболее важную часть приложения в .net
user7558114

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

Ответы:


73

Вы ничего не упустили. 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.

Для сторонних кроссплатформенных вариантов см. Другие ответы.


46
боже, это шок! так в чем же смысл кроссплатформенной структуры, у которой нет графического интерфейса?
EKanadily

21
@EssamGndelee В первую очередь речь идет о приложениях ASP.NET Core. Второстепенным моментом являются консольные приложения.
svick

3
@ChristopherPainter Лучшая поддержка облачных вычислений и привлечение разработчиков с таких платформ, как Node.js, - вот некоторые из причин, по которым существует .Net Core, да. Но это не значит, что сейчас Microsoft заботится только о них.
svick

1
@CYoung Я думаю, что позиция Microsoft заключается в том, что для этого вам следует использовать UWP.
svick

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

50

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

40

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


7
Но почему электрон? Вы также можете просто открыть веб-приложение на порту X, а затем перейти к нему в браузере. Включает в себя все, что может Electron, и многое другое, потому что это всегда последняя версия браузера - в отличие от Electron. Если вам нужна конкретная версия браузера, включите Google-Chrome в свой дистрибутив.
Stefan Steiger

1
@StefanSteiger Я думаю, что использование электрона, а также вызов API напрямую через сборку заполнят пробел, в котором пользователь не увидит приложение как веб-приложение. И некоторые разработчики не хотят добавлять дополнительный уровень связи с использованием HTTP.
Брайан Нг

Electron.Net выглядит так, как будто теперь это довольно просто cross-platform-blog.com/electron.net/…
Дж. Аллен

Electron.NET выглядит многообещающе, но мне было бы утомительно использовать его в производственной среде, потому что он заставляет вас открывать незащищенный веб-сервер на производственной машине. Опять же, пока приложение ASP.NET Core находится за правильно настроенным обратным прокси-сервером, таким как IIS или nginx (или аналогичный), вы должны быть в большей безопасности.
Джейми Тейлор

ад может просто приложение как mvc / webapi, размещать локально на случайном порте и использовать электронный интерфейс, вызывающий локальный api.
Wjdavis5

31

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

Он высокопроизводительный (не «болтливый»), полнофункциональный и работает в Linux / OSX / Windows.

Ознакомьтесь с моим сообщением в блоге, чтобы узнать, как он сравнивается с другими вариантами, существующими в настоящее время.

PS: я автор.


Это выглядит очень многообещающе, я буду над этим изучать
Даниэль

21

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

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

Взгляните на этот пост, в нем объясняется, как создать кроссплатформенное настольное приложение с Electron и .Net Core, и проверить код на github.


20

Для создания консольного пользовательского интерфейса вы можете использовать gui.cs . Он имеет открытый исходный код (от Мигеля, создателя Xamarin) и работает на ядре .Net в Windows, Linux и MacOs.

Он состоит из следующих компонентов:

  • Кнопки
  • Этикетки
  • Текстовый ввод
  • Просмотр текста
  • Поле редактирования времени
  • Радио-кнопки
  • Флажки
  • Диалоговые окна
    • Окна сообщений
  • Windows
  • Меню
  • ListViews
  • Кадры
  • ProgressBars
  • Виды прокрутки и полосы прокрутки
  • Шестнадцатеричный просмотрщик / редактор (HexView)

Образец снимка экрана

Пример вывода снимка экрана gui.cs


17

мы написали решение с открытым исходным кодом для электронов с ядром .net: Electron.NET . https://github.com/ElectronNET/Electron.NET

Наслаждайтесь!


17
Что за писк. Если мне нужна HTML-страница, я сделаю HTML-страницу. Я хочу что-то, что лучше этого взаимодействует с рабочим столом.
Джошуа

6

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


4

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

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

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

Тот факт, что сообщество разработчиков ПО с открытым исходным кодом не может согласиться на «стандартную» настройку виртуальной машины и 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 нормально (уродливо). В 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

Это по-прежнему веб-приложение, но это очень легкий способ превратить веб-приложение в настольное приложение без изучения новой структуры или / и переделки пользовательского интерфейса, и он отлично работает.

Это неудобство, в отличие от, например, Electron или ReactXP , результатом является универсальное приложение для Windows, а не кроссплатформенное настольное приложение.


3

Да, это возможно.

.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 из моно.
Перенесите его на .NET Core или NetStandard.

Перекомпилируйте свои приложения WinForms в соответствии с новым System.Windows.Forms.
Исправьте все, что может быть сломано NetCore.
Молитесь, чтобы mono безупречно использовал нужные вам детали.
(если этого не произойдет, вы всегда можете перестать молиться и отправить монопроекту пул-реквест с вашим исправлением / патчем / функцией)

Вот мой репозиторий CoreFX WinForms:
https://github.com/ststeiger/System.CoreFX.Forms


2

Это старый вопрос, но да, можно разрабатывать кроссплатформенные настольные (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 сделайте это, если вы сделали шаг №3

Хорошо, можешь перестать читать мой ответ и начать добавлять код в MyWinFormsApp проект. но если вы хотите работать с Form Designer, продолжайте читать.

  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 NETCOREAPP3_1
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

Теперь вы можете открыть MyWinFormsAppпроект с помощью Visual Studio 2019 ( я думаю, вы тоже можете использовать Visual Studio 2017, но я не уверен ) и дважды щелкните по нему, Form1.csи вы должны увидеть это:

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

Хорошо, откройте Toolbox ( Ctrl+W,X) и начните добавлять элементы управления в свое приложение и сделать его красивым.

Вы можете узнать больше о конструкторе в Windows Forms .NET Core Designer.


0

WinForms (и его визуальный конструктор) доступны для .NET Core (в качестве предварительной версии), начиная с Visual Studio 2019 16.6. Это неплохо, хотя иногда мне нужно открыть Visual Studio 2019 16.7 Preview, чтобы обойти досадные ошибки.

См. Это сообщение в блоге: https://devblogs.microsoft.com/dotnet/windows-forms-designer-for-net-core-released/

Кроме того, WinForms теперь имеет открытый исходный код: https://github.com/dotnet/winforms

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.