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

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

Что мне не хватает?


person EKanadily    schedule 22.09.2016    source источник
comment
Вам следует изменить угол обзора этой новой платформы. Все существующие платформы, WPF / WinForms / UWP / GTK # / Xamarin.Mac / iOS / Android, могут использовать код, который вы пишете на .NET Core. Это делает возможной кроссплатформенную разработку, но не так, как вы себе представляете.   -  person Lex Li    schedule 23.09.2016
comment
Итак, вы говорите, что я могу создавать графические интерфейсы, например, в winforms и код серверной части в ядре .NET.   -  person EKanadily    schedule 23.09.2016
comment
нет. Пакеты, построенные на .NET Core, можно добавлять напрямую в качестве ссылок.   -  person Lex Li    schedule 23.09.2016
comment
Электрон - это то, что нужно. Используйте asp.net за api. Если вы сохраните индикатор логики пользовательского интерфейса, вы сможете сохранить наиболее важную часть приложения в .net.   -  person user7558114    schedule 13.02.2017
comment
В качестве профессионального совета я бы обновился до Visual Studio 2017 (если возможно) или использовал другие доступные инструменты (CLI и / или VS Code / Rider), потому что VS 2015 не имеет доступа к инструментам .NET Core 2.0, которые будут препятствуют вашему дальнейшему развитию. Даже если все, что вы делаете, это экспериментируете с этим.   -  person Jamie Taylor    schedule 16.11.2017
comment
На последнем мероприятии Microsoft Build они объявляют новости о .NET Core 3. Изюминкой .NET Core 3 является поддержка настольных приложений Windows, в частности Windows Forms, Windows Presentation Framework (WPF) и UWP XAML. Подробнее об этом можно узнать здесь   -  person Rui Fernandes    schedule 13.08.2018
comment
Я не вижу смысла в UWP. Я хочу запускать свои приложения .NET / WPF в Windows и Mac. Меня не волнуют Hololens, xbox, Surface Hub и др.   -  person Christopher Painter    schedule 10.03.2019
comment
проверьте этот проект: NBlink Я работаю над ним на основе протокол chrome devtools   -  person anixati    schedule 13.04.2019
comment
Обычно я бы проголосовал за то, чтобы закрыть что-то подобное как не по теме, но сейчас этот вопрос о переполнении стека является главным хитом Google для графического интерфейса Linux Net Core; поэтому я даю вам Eto.Forms, который является еще одним хитом Google. dotnetcoretutorials.com/2018/03/19/   -  person Joshua    schedule 06.07.2019


Ответы (17)


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

.NET Core 3.0 включает поддержку Windows Forms и WPF, но только для Windows.

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

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

person svick    schedule 22.09.2016
comment
боже, это шок! так в чем же смысл кроссплатформенной структуры, у которой нет графического интерфейса? - person EKanadily; 23.09.2016
comment
@EssamGndelee В первую очередь речь идет о приложениях ASP.NET Core. Второстепенным моментом являются консольные приложения. - person svick; 23.09.2016
comment
@ChristopherPainter Лучшая поддержка облачных вычислений и привлечение разработчиков с таких платформ, как Node.js, - вот некоторые из причин, по которым существует .Net Core, да. Но это не значит, что сейчас Microsoft заботится только о них. - person svick; 25.07.2017
comment
В этом пространстве, кажется, больше не будет никаких изменений. Означает ли это, что Microsoft подразумевает, что мы должны отказаться от приложений на основе Windows GUI? - person CYoung; 16.11.2017
comment
@CYoung Я думаю, что позиция Microsoft заключается в том, что для этого вам следует использовать UWP. - person svick; 16.11.2017
comment
@svick, что полностью устранило бы любое кроссплатформенное программирование, которое должно было решить .NET Core. UWP подходит только для семейства MS: / - person walther; 16.11.2017
comment
Мне кажется, вы путаете здесь ASP.NET Core и .NET Core. ASP.NET Core - это среда веб-приложений, а .NET Core - кроссплатформенная среда выполнения. - person Jamie Taylor; 16.11.2017
comment
Я считаю этот ответ вводящим в заблуждение (по крайней мере, сегодня) - он говорит о том, что MS сделала или не сделала ... но вопрос касается параметров графического интерфейса Visual Studio, .NET Core и Linux: - их много, (Xamarin, Qml.NET, Gtk #, QtSharp ...), доступный как VS Extensions, отдельные SDK или NuGets ... и т. Д., То есть через каналы доставки, поддерживаемые MS. - person hardyVeles; 22.01.2020

AvaloniaUI теперь поддерживает работу поверх .NET Core в Windows, OS X и Linux. Включены XAML, привязки и шаблоны элементов управления.

Например. для разработки на macOS с помощью Rider:

  1. Следуйте инструкциям, чтобы установить новые шаблоны Avalonia dotnet
  2. Откройте JetBrains Rider и на экране приветствия
  3. Выберите Новое решение → (в верхней части списка шаблонов) → Дополнительные шаблоны → Кнопка установки шаблона ... * → перейдите к < em> каталог, в который вы клонировали шаблоны на шаге 1.
  4. Нажмите кнопку Reload.
  5. Вот! Шаблоны Avalonia теперь отображаются в New Solution Списке шаблонов!
  6. Выберите шаблон Avalonia
  7. Строй и беги. Посмотрите на графический интерфейс, открытый перед вашими глазами.

Действия с графическим интерфейсом пользователя для установки нового шаблона dotnet в JetBrains Rider

person kekekeks    schedule 01.06.2017
comment
Кроме того, любой заинтересованный, пожалуйста, проголосуйте за Jetbrains, чтобы включить поддержку Avalonia в Rider: youtrack.jetbrains.com / issue / RIDER-39247 - person xendi; 08.09.2020

Вы можете использовать Electron и подключить его к Edge.js соответственно. электронный край. Edge.js позволяет Electron (Node.js) вызывать файлы DLL .NET и наоборот.

Таким образом, вы можете написать графический интерфейс с помощью HTML, CSS и JavaScript, а серверную часть - с помощью .NET Core. Сам Electron также является кроссплатформенным и основан на браузере Chromium.

person P. Wenger    schedule 29.09.2016
comment
Но почему электрон? Вы также можете просто открыть веб-приложение на порту X, а затем перейти к нему в браузере. Включает в себя все, что может Electron, и многое другое, потому что это всегда последняя версия браузера - в отличие от Electron. Если вам нужна конкретная версия браузера, включите Google-Chrome в свой дистрибутив. - person Stefan Steiger; 19.06.2017
comment
@StefanSteiger Я думаю, что использование электрона, а также вызов API напрямую через сборку заполнит пробел, из-за которого пользователь не увидит приложение как веб-приложение. И некоторые разработчики не хотят добавлять дополнительный уровень связи с использованием HTTP. - person Brian Ng; 18.08.2017
comment
Electron.Net теперь выглядит довольно просто cross-platform-blog.com/electron.net/ - person J. Allen; 30.10.2017
comment
Electron.NET выглядит многообещающе, но мне было бы утомительно использовать его в производственной среде, потому что он вынуждает вас открывать незащищенный веб-сервер на производственной машине. Опять же, пока приложение ASP.NET Core находится за правильно настроенным обратным прокси-сервером, таким как IIS или nginx (или аналогичный), вы должны быть в большей безопасности. - person Jamie Taylor; 16.11.2017
comment
ад может просто приложение как mvc / webapi, размещать локально на случайном порту и использовать электронный интерфейс, вызывающий локальный api. - person Wjdavis5; 14.03.2018

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

Он высокопроизводительный (не P / Invoke chatty), полнофункциональный и работает в Linux и ОС. X и Windows.

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

PS: я автор.

person Paul Knopf    schedule 22.08.2018
comment
Это выглядит очень многообещающе, я буду над этим изучать - person Daniel; 04.03.2020

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

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

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

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

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

person Kolappan N    schedule 06.08.2019

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

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

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

person Rui Figueiredo    schedule 10.03.2017

.NET Core 3 будет поддерживать создание настольных приложений Windows. Вчера во время конференции .NET я смотрел демонстрацию технологии.

Это единственное сообщение в блоге, которое мне удалось найти, но оно иллюстрирует суть вопроса: . NET Core 3 и поддержка настольных приложений Windows

person Alex Dresko    schedule 13.09.2018

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

.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.

На этой странице есть руководство о том, как его использовать. Он также содержит некоторые ссылки на репозитории примеров кода.

person Fiodar Sazanavets    schedule 12.08.2018

Я работаю над проектом, который может помочь: https://github.com/gkmo/CarloSharp

Следующее приложение написано на .NET с пользовательским интерфейсом на HTML, JavaScript и CSS (Angular).

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

person guilhermekmelo    schedule 15.03.2019
comment
Пожалуйста, не используйте HTML. - person Richard Lalancette; 12.12.2019
comment
@ Ричард Лалансетт: Почему? Вы можете уточнить? Разве код Visual Studio не является примером такого подхода? - person Peter Mortensen; 24.11.2020
comment
Это просто ужасная технология для настольного приложения. Очевидно, это зависит от желаемого уровня производительности и качества. - person Richard Lalancette; 25.11.2020

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

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

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

Тот факт, что сообщество с открытым исходным кодом не может согласиться со стандартной настройкой для виртуальной машины и DE, означает, что разработчикам .NET Core будет довольно сложно создать среду графического интерфейса, которая будет работать на всех платформах и комбинациях DE и WMs.

У многих здесь есть отличные предложения (от использования ASP.NET Core для создания веб-приложения и использования браузера до перечисления нескольких кроссплатформенных фреймворков). Если вы посмотрите на некоторые из упомянутых кросс-платформенных графических интерфейсов, перечисленных, вы увидите, насколько они тяжелы.

Однако в конце туннеля есть свет, поскольку Мигель де Иказа наивно продемонстрировал, что Xamarin работает. на Linux и macOS на .NET Conf в этом году (2017, если вы читаете это в будущем), так что, возможно, стоит попробовать это, когда оно будет готово.

(Но вам необходимо обновить Visual Studio 2015 до Visual Studio 2017, чтобы получить доступ к функциям .NET Core 2.0.)

person Jamie Taylor    schedule 16.11.2017
comment
нет аргументов в пользу разнообразия Linux. 1. Java работает без сбоев. 2. Mono запускает WinForms нормально (ты уродливо). В Linux вы можете использовать GTK в дистрибутиве на основе QT и наоборот. Было бы здорово иметь привязки QT для ядра .NET. - person Bogdan Mart; 24.01.2018
comment
Я согласен со всем, что вы говорите. Однако я считаю, что подход Microsoft заключается в предоставлении IaaS (инфраструктуры как услуги), SaaS (программного обеспечения как услуги) и PaaS (платформы как услуги) через свою платформу Azure на данный момент. Было бы разумно, если бы их первая кроссплатформенная платформа с открытым исходным кодом указала разработчикам на это направление как на приоритет. Работа, которую Azure и другие компании, такие как RHEL и Google, делают для поддержки как ASP NET Core, так и .NET Core, практически легендарна, и логично, что приоритет .NET Core, кажется, отражает это. - person Jamie Taylor; 24.01.2018

Вы можете разработать веб-приложение с .NET Core и MVC и инкапсулировать его в универсальное приложение JavaScript для Windows: Прогрессивные веб-приложения для Windows

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

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

person AdrienTorris    schedule 16.05.2017

В особом случае существующих приложений Windows Forms:

Способ есть - хотя я не знаю, насколько хорошо он работает.
Это выглядит так:
Возьмите реализацию Windows Forms из Mono.
Перенесите его на .NET Core или NetStandard.

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

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

person Stefan Steiger    schedule 08.09.2018

Да, можно разрабатывать кроссплатформенные настольные (GUI) приложения для Windows, Linux и macOS, используя Visual Studio Code, .NET Core, C #, GTK 3, gtksharp и Glade в качестве разработчика графического интерфейса.

Вот как.

person Teo Bebekis    schedule 17.03.2019

Я искал это целую вечность, и ни одно из приведенных выше решений не удовлетворило меня.

В итоге я работал с https://github.com/mellinoe/ImGui.NET. .

Я могу подтвердить, что он работает по крайней мере с macos и win10 и утверждает, что он совместим с Linux.

Оставьте это здесь на случай, если это кому-то поможет.

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

person Richard Lalancette    schedule 04.01.2021
comment
имеет корни, связанные с игрой, эта штука ... моя робкая догадка, она просто перерисовывает все кадр за кадром? или (разве вы не знаете?) он обновляет только элементы, которые нужно было обновить / перерисовать? было бы круто если так .. - person jungle_mole; 20.01.2021
comment
Это правильно. Каждый кадр обрабатывает все элементы. Я считаю, что есть кеш, если ничего не изменится. Я использовал это для создания плагинов после эффектов, и это довольно мило. У него есть несколько более слабых сторон. - person Richard Lalancette; 22.01.2021

Если вы используете .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. Но если вы хотите работать с конструктором форм, продолжайте читать.

  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, и вы должны увидеть следующее:

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

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

Вы можете узнать больше о дизайнере на Windows Forms .NET. Core Designer.

person Mehdi Dehghani    schedule 02.03.2020

Он будет доступен с использованием .NET 6: https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-1/

Но вы уже можете создавать приложения WinForms, используя netcore 3.1 и net 5 (по крайней мере, в Visual Studio 2019 16.8.4+).

Создать образец приложения winforms

Доступен конструктор пользовательского интерфейса

person Zhuravlev A.    schedule 18.02.2021

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

См. Это сообщение в блоге: Конструктор Windows Forms для .NET Core выпущен

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

person A. Niese    schedule 28.10.2020
comment
Но только в Windows, а не в Linux (?). Об этом никогда не говорится. - person Peter Mortensen; 24.11.2020
comment
Ага, окна пока только. С .Net 6 все станет лучше. - person Richard Lalancette; 03.02.2021