.net core 是否可以在.NET内核中创建桌面GUI应用程序?
我开发Windows窗体程序已经有几年了。我现在正在研究.NET Core(包括ASP.NET Core MVC)。我正在搜索新的GUI桌面技术。在Visual Studio 2015 update 3中,我看不到在.NET Core中制作GUI应用程序的任何选项.net core 是否可以在.NET内核中创建桌面GUI应用程序?,.net-core,coreclr,.net Core,Coreclr,我开发Windows窗体程序已经有几年了。我现在正在研究.NET Core(包括ASP.NET Core MVC)。我正在搜索新的GUI桌面技术。在Visual Studio 2015 update 3中,我看不到在.NET Core中制作GUI应用程序的任何选项 我错过了什么?你没有错过任何东西。在.NET Core 3之前,微软没有提供任何合理的方法来直接使用.NET Core创建GUI应用程序,不过(通用Windows平台)部分构建在.NET Core之上 .NET Core 3.0包括对
我错过了什么?你没有错过任何东西。在.NET Core 3之前,微软没有提供任何合理的方法来直接使用.NET Core创建GUI应用程序,不过(通用Windows平台)部分构建在.NET Core之上 .NET Core 3.0包括对Windows窗体和WPF的支持,尽管它仅限于Windows .NET6将包括.NETMAUI,它将支持Windows和macOS桌面应用程序和移动应用程序,以及社区(而非MS)支持的Linux桌面应用程序。NET5将包括.NETMAUI的预览版本 有关第三方跨平台选项,请参阅其他答案。您可以使用resp并将其连接起来。js允许Electron(Node.js)调用.NET DLL文件,反之亦然
通过这种方式,您可以使用HTML、CSS和JavaScript编写GUI,并使用.NET内核编写后端。Electron本身也是跨平台的,基于Chromium浏览器。一个选项是将Electron与JavaScript、HTML和CSS一起用于UI,并构建一个.NET核心控制台应用程序,该应用程序将自行托管一个用于后端逻辑的web API。Electron将在后台启动控制台应用程序,该应用程序将在localhost:xxxx上公开服务 通过这种方式,您可以使用.NET实现所有后端逻辑,以便通过来自JavaScript的HTTP请求进行访问
看看这篇文章,它解释并检查代码。你可以用.NET内核和MVC开发一个web应用程序,并将其封装在Windows通用JavaScript应用程序中: 它仍然是一个web应用程序,但它是一种非常轻量级的方法,可以将web应用程序转换为桌面应用程序,而无需学习新框架或/或重新开发UI,而且效果非常好 不便之处不同于或例如,其结果是通用Windows应用程序而不是跨平台桌面应用程序。现在支持在Windows、OS X和Linux上运行在.NET Core之上。包括XAML、绑定和控件模板 例如,使用Rider在macOS上开发:
新解决方案模板列表中李>
选择Avalonia模板
构建并运行。看到GUI在您眼前打开
tl;dr-我不确定.NET核心开发人员是否有可能提供跨平台GUI框架
我觉得希望将跨平台GUI框架捆绑到官方工具中(特别是旧版本的工具-您提到您正在运行Visual Studio 2015 update 3)以获得早期版本的.NET Core有点为时过早
GUI框架非常繁重,并且依赖于主机上已经存在的硬件抽象。在Windows上,大多数用户通常使用单一的窗口管理器(WM)和桌面环境(DE),但在支持的许多不同的Linux发行版上,有许多可能的WMs和DE,大多数用户将使用X-Server或与或结合使用。但是没有一个Linux安装是相同的
事实上,开源社区无法真正解决VM和DE的“标准”设置,这意味着.NET核心开发人员很难创建一个GUI框架,该框架可以跨所有平台以及DE和WMs的组合工作
这里的很多人都有一些很好的建议(从使用ASP.NET核心构建Web应用程序到使用浏览器,再到列出一系列跨平台框架)。如果您看一下列出的一些提到的跨平台GUI框架,就会发现它们有多重
然而,今年(2017年,如果你将来读到这篇文章的话)隧道的尽头是光明的,所以当它准备好的时候,可能值得一试
(但您需要从Visual Studio 2015升级到Visual Studio 2017才能访问.NET Core 2.0功能。)是的,这是可能的
.NET Core没有任何用于本机GUI应用程序的现成组件。然而,根据Gregor Biswanger的回答,有一个名为NuGet的包
是一个框架,允许您在Node.js之上构建本机GUI应用程序。Electron.NET是一个NuGet包,允许您在.NET核心代码中使用Electron和Node.js
好消息是,为了能够使用NuGet包,您不必学习JavaScript、Electron或Node.js。JS文件确实在应用程序中运行,但它们是由构建过程自动生成的
您所要做的就是构建一个标准的ASP.NET核心MVC应用程序。唯一的区别是,它不是在浏览器中运行,而是作为本机窗口应用程序运行。除了Electron.NET包特有的几行代码之外,您不需要学习ASP.NET核心MVC以上的任何内容
提供有关如何使用它的教程。它还包含一些指向示例代码存储库的链接。现在可以使用Qt、QtQuick和QML与.NET核心一起使用
它具有高性能(而不是“闲聊”),功能齐全,可以跨Linux、OS X和Windows运行
查看它与当前其他选项的比较
附:我是作者。关于存在的特例
<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>