有没有可能在.NETCore 中制作桌面 GUI 应用程序?

我已经开发 Windows 窗体程序好几年了。我现在正在调查。NET 核心(包括 ASP.NET 核心 MVC)。我正在寻找新的 GUI 桌面技术。在 VisualStudio2015更新3中,我看不到任何在其中创建 GUI 应用程序的选项。NET 核心。

我错过了什么?

144362 次浏览

你什么都没错过。微软没有合理的方法直接使用。NET 核心,直到。NET Core 3,尽管 UWP(通用 Windows 平台)部分构建在。NET 核心。

.NET Core 3.0包括对 Windows 窗体和 WPF 的支持,尽管它只支持 Windows。

.NET 6将包括。NET MAUI,它将支持 Windows 和 macOS 桌面应用程序和移动应用程序,Linux 桌面应用程序由社区(而不是 MS)支持。.NET 5将包括一个预览版。NET MAUI.

有关第三方跨平台选项,请参见其他答案。

你可以使用 电子和电线与 Edge.js呼吸。电子边缘.Js 允许 Electron (Node.js)调用。NET DLL 文件,反之亦然。

这样你就可以用 HTML、 CSS 和 JavaScript 编写 GUI,后端用。NET 核心。电子本身也是跨平台的,基于 Chromium 浏览器。

一种选择是将 Electron 与 JavaScript、 HTML 和 CSS 一起用于 UI 并构建一个。NET 核心控制台应用,可以自我托管后端逻辑的 web API。电子将在后台启动控制台应用,从而暴露 Localhost: xxxx上的服务。

通过这种方式,您可以使用.NET 实现所有后端逻辑,以便通过来自 JavaScript 的 HTTP 请求进行访问。

看看这篇文章,它解释了 如何建立一个跨平台的桌面应用程序与电子和.NET 核心和检查代码的 GitHub

你可以开发一个网络应用程序。NET 核心和 MVC,并封装在一个 Windows 通用的 JavaScript 应用程序: Windows 上的进步网络应用程序

它仍然是一个 Web 应用程序,但它是一个非常轻量级的方法,可以将 Web 应用程序转换为桌面应用程序,而无需学习新的框架或/和重新开发用户界面,它工作得很好。

这种不便不像 电子ReactXP,例如,其结果是一个通用的 Windows 应用程序,而不是一个跨平台的桌面应用程序。

AvaloniaUI 现在支持在。Windows,OS X 和 Linux 上的 NET 核心。XAML,包括绑定和控件模板。

例如,用 Rider 在 macOS 上开发:

  1. 按照指示到 安装 Avalonia dotnet 新模板
  2. 打开 JetBrains Rider,在欢迎屏幕上,
  3. 选择 新的解决方案→(接近 模板列表的顶部)→ 更多模板→ Button Install Template... * →浏览到 目录,您在步骤1中克隆了模板。
  4. 单击 Reload按钮
  5. 看! Avalonia 模板现在出现在 New Solution模板列表中!
  6. 选择 Avalonia 模板
  7. 构建并运行。看到图形用户界面在你眼前打开。

GUI steps to install a dotnet new template into JetBrains Rider

Dr -我不确定。NET 核心开发人员提供一个跨平台的 GUI 框架。

我希望将一个跨平台的 GUI 框架绑定到官方工具中(特别是旧版本的工具——您提到您正在运行 Visual Studio 2015 update 3)。NET 核心还为时过早。

GUI 框架实际上非常繁重,并且依赖于主机上已经存在的硬件抽象。在 Windows 系统中,大多数用户通常使用单一窗口管理器(WM)和桌面环境(DE) ,但是在许多不同的 Linux 发行版本中,有许多可能的 WM 和 DE ——大多数用户将使用 X-Server 或 韦兰KDEGNOMEXfce结合使用。但是没有一个 Linux 安装是相同的。

事实上,开源社区不能真正为 VM 和 DE 建立一个“标准”设置,这意味着对于。NET 核心开发人员创建一个 GUI 框架,这个框架可以跨所有平台以及 DEs 和 WM 的组合。

这里的很多人都有一些很棒的建议(从使用 ASP.NET Core 构建 Web 应用程序,到使用浏览器列出一系列跨平台框架)。如果您看一下上面列出的一些跨平台 GUI 框架,您将看到它们有多重。

然而,今年(2017年,如果你将来读到这篇文章的话) Miguel de Icaza 在.NET Conf 上展示了在 Linux 和 macOS 上天真运行的 Xamarin已经是隧道的尽头了,所以当它准备好的时候可能值得一试。

(但是您需要从 Visual Studio 2015升级到 Visual Studio 2017才能访问.NET Core 2.0特性。)

是的,有可能。

.NET 核心没有任何开箱即用的本地 GUI 应用程序组件。然而,根据 Gregor Biswanger 的回答,有一个名为 Electron.NET的 NuGet 软件包。

Electron 是一个允许您在 Node.js 之上构建本地 GUI 应用程序的框架。NET 是一个 NuGet 包,它允许你从你的。NET 核心代码。

好消息是你不需要学习 JavaScript,Electron 或者 Node.js 来使用 NuGet 包。JS 文件确实在应用程序内部运行,但它们是由构建过程自动生成的。

你所要做的就是构建一个相当标准的 ASP.NET 核心 MVC 应用程序。唯一的区别是,它不是在浏览器中运行,而是作为一个本地窗口应用程序运行。除了几行特定于 Electron.NET 包的代码之外,您不需要学习 ASP.NET Core MVC 之上的任何东西。

这个页面 提供了一个关于如何使用它的教程,它还包含一些到示例代码库的链接。

现在可以使用 Qml. Net在.NET Core 中使用 Qt、 QtQuick 和 QML。

它具有高性能(而不是“ 请求喋喋不休”) ,功能齐全,可以在 Linux、 OS X 和 Windows 上运行。

查看 我的博客文章,看看它与当前其他选项的比较。

附言: 我是作者。

对于 现有的 Windows 窗体应用程序的特殊情况:

有一种方法——尽管我不知道它的效果如何。
是这样的:
单核细胞增多症中的 Windows 窗体实现为例。
将其移植到.NETCore 或 NetStandard。

根据新的 System.Windows.Forms 重新编译 Windows 窗体应用程序。
修复任何可能被.NET 核心破坏的东西。
祈祷单核细胞增多症能完美地完成你需要的部分。
(如果没有,你可以停止祈祷,用你的补丁/补丁/功能向 Mono 项目发送一个拉请求。)

这是我的 CoreFX Windows 窗体存储库:
Https://github.com/ststeiger/system Corefx 表格

.NETCore3将支持创建 Windows 桌面应用程序。我昨天看了这项技术的演示。网上会议。

这是我能找到的唯一一篇博客文章,但它确实阐明了这一点: Http://blogs.msdn.microsoft.com/dotnet/2018/05/07/NET-Core-3-and-Support-for-Windows-desk-apps/rel = “ nofollow noReferrer”> . NET Core 3 and Support for Windows Desktop Applications

我正在做一个可能会有帮助的项目: https://github.com/gkmo/CarloSharp

下面的应用程序是用.NET 编写的,UI 使用 HTML、 JavaScript 和 CSS (角形)。

Enter image description here

是的,可以使用 VisualStudio 代码为 Windows、 Linux 和 macOS 开发跨平台桌面(GUI)应用程序。NET Core,c # ,GTK3,gtkSharp 和格莱德作为 GUI 设计者。

这里是 怎么做

要创建基于控制台的 UI,可以使用 Gui.cs。它是开源的(来自 Miguel de IcazaXamarin的创建者) ,并且运行在。基于 Windows,Linux 和 macOS 的 NET 核心。

它包括以下组成部分:

  • 纽扣
  • 标签
  • 文本输入
  • 文本视图
  • 时间编辑字段
  • 无线电按钮
  • 复选框
  • 对话框
    • 留言箱
  • 窗户
  • 菜单
  • 列表视图
  • 框架
  • 进步酒吧
  • 滚动视图和滚动条
  • 十六进制查看器/编辑器(HexView)

样本截图

gui.cs sample output screenshot

如果你正在使用。NET Core 3.0及以上版本,按照以下步骤操作即可: (我将使用 .NET 核心 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 如果你做了第三步,就这样做

好吧,你可以停止阅读我的答案,开始添加代码到 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. 打开文件 程序并添加以下 预处理器-如果
#if NETCOREAPP3_1
Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif

现在您可以使用 Visual Studio 2019(我想你也可以使用 Visual Studio 2017,但是我不确定)打开 MyWinFormsApp项目,然后双击 Form1.cs,您应该会看到:

Enter image description here

好的,打开 Toolbox (Ctrl + WX)并开始向您的应用程序添加控件,使其更美观。

你可以在 Windows Forms. NET 核心设计器上了解更多关于设计师的信息。

Windows 窗体(及其可视化设计器)可用于。NET 核心(作为预览版)自 Visual Studio 201916.6以来。虽然有时候我需要打开 Visual Studio 201916.7预览版来解决恼人的 bug,但是它还是相当不错的。

看看这篇博文: Windows Forms Designer for.NET Core release Windows Forms Designer for.NET Core release

此外,Windows 窗体现在是开源的: https://github.com/dotnet/winforms

我已经为此寻找了很长时间,但是上面的任何一个解决方案都不能让我满意。

我目前为 https://github.com/mellinoe/ImGui.NET工作。

我可以确认,它至少可以在 macos 和 win10之间工作,并声称与 linux 兼容。

把这个留在这里,以防它能帮到什么人。

enter image description here

它将使用.NET 6: Https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-1/

但是您已经可以使用 netcore 3.1和 net 5创建 WinForms 应用程序(至少在 Visual Studio 201916.8.4 + 中)。

Create winforms app sample

UI Constructor available