.net core 是否可以在.NET内核中创建桌面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包括对

我开发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包括对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上开发:

  • 遵照指示
  • 打开JetBrains Rider,从欢迎屏幕中
  • 选择新的解决方案→ (位于模板列表顶部附近)→ 更多模板→ 按钮安装模板…*→ 浏览到在步骤1克隆模板的目录
  • 单击“重新加载”按钮
  • 瞧!Avalonia模板现在出现在
    新解决方案
    模板列表中
    
  • 选择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>