我一直在开发winforms程序几年。我现在正在研究.NET核心(包括ASP.NET核心MVC)。我正在寻找新的GUI桌面技术。在visual studio 2015 update 3我不能看到在.NET核心中制作GUI应用程序的任何选项。我错过了什么?
答案 0 :(得分:38)
你没有遗漏任何东西。目前,没有合理的方法直接使用.Net Core创建GUI应用程序。
虽然UWP(通用Windows平台)部分构建在.Net Core之上。
此外,.Net Core 3.0(每日构建已经可用)将包括对Winforms和WPF的支持,尽管它只是Windows。
答案 1 :(得分:35)
您可以使用Electron并将其与Edge.js分享。 electron-edge。 Edge.js允许电子(node.js)调用.net dll,反之亦然。 这样,您可以使用HTML,CSS和JavaScript编写GUI,使用.net核心编写后端。 Electron本身也是跨平台的,基于铬浏览器。
答案 2 :(得分:18)
一种选择是使用带有JavaScript,HTML和CSS的Electron用于UI,并构建一个.Net Core控制台应用程序,该应用程序将自动托管用于后端逻辑的web api。 Electron将在后台启动控制台应用程序,该应用程序将在localhost:xxxx上公开服务。
通过这种方式,您可以使用.Net实现所有后端逻辑,以便通过JavaScript的HTTP请求进行访问。
看看这篇文章,它会解释how to build a cross-platform desktop application with Electron and .Net Core并检查github上的代码
答案 3 :(得分:16)
AvaloniaUI现在支持在Win / OSX / Linux上运行.NET Core。包括XAML,绑定和控制模板。
答案 4 :(得分:12)
我们使用.net核心编写了一个开源的电子解决方案: Electron.NET 。 https://github.com/ElectronNET/Electron.NET
享受!
答案 5 :(得分:10)
现在可以使用Qml.Net将Qt / QtQuick / QML与.NET Core一起使用。
它是高性能(不是“ pinvoke chatty”),功能齐全,并且可以在Linux / OSX / Windows上运行。
查看my blog post,以了解它与当前其他选项的比较。
PS:我是作者。
答案 6 :(得分:9)
要创建基于控制台的UI,可以使用gui.cs。它是开源的(来自Xamarin的创建者Miguel),并且在Windows,Linux和MacO的.Net内核上运行。
它包含以下组件:
示例屏幕截图
答案 7 :(得分:5)
.NET Core 3将支持创建Windows桌面应用程序。我昨天在.NET会议上观看了该技术的演示。这是我唯一能找到的博客文章,但确实说明了这一点:https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications/
答案 8 :(得分:2)
tl; dr - 我不确定.NET Core开发者是否有可能提供跨平台的GUI框架。
我觉得期待一个跨平台的GUI框架被捆绑到官方工具(特别是工具的旧版本 - 你提到你正在运行VS 2015更新3)的早期版本的.NET Core有点不成熟。
GUI框架非常繁重,并且依赖于主机上已存在的硬件抽象。在Windows上,大多数用户通常使用单个窗口管理器(WM)和桌面环境(DE),但是在支持的许多不同的Linux发行版上,有许多可能的WM和DE - 授予大多数用户要么将X-Server或Wayland与KDE,Gnome或XFCE结合使用。但是,Linux的安装并不相同。
开源社区无法真正满足"标准"设置VM和DE意味着.NET Core开发人员很难创建一个可以跨所有平台以及DE和WM组合工作的GUI框架。
这里的很多人都有一些很好的建议(使用ASP.NET Core构建Web应用程序并使用浏览器列出一堆跨平台框架)。如果你看一下列出的一些提到的跨平台GUI框架,你会看到它们有多重。
然而,今年隧道尽头有Miguel de Icaza showed off Xamarin running naively on Linux and MacOS at .NET Conf的亮点(2017年,如果您将来再读这篇文章的话),所以当它“#3”}时,可能值得尝试。准备好了。
(但您需要从VS 2015升级到VS 2017才能访问.NET Core 2.0功能)
答案 9 :(得分:2)
这是一个古老的问题,但是可以,可以使用VSCode,.Net Core,C#,gtk3,gtksharp和Glade作为GUI Designer,为Windows,Linux和macOS开发跨平台桌面(GUI)应用程序。
这里是how。
答案 10 :(得分:2)
我多年来一直在寻找这个,但上述解决方案都没有让我满意。
我暂时与 https://github.com/mellinoe/ImGui.NET 合作。
我可以确认它至少适用于 macos 和 win10,并声称与 linux 兼容。
留在这里以防它可以帮助某人。
答案 11 :(得分:1)
您可以使用.NET Core和MVC开发Web应用程序,并将其封装在Windows通用JavaScript应用程序中:https://docs.microsoft.com/en-us/windows/uwp/porting/hwa-create-windows
它仍然是一个网络应用程序,但它是一种非常轻量级的方式,可以将Web应用程序转换为桌面应用程序,而无需学习新的框架或/和重新开发UI,并且效果很好。
答案 12 :(得分:1)
是的,有可能。
.NET Core没有用于本机GUI应用程序的任何组件。但是,根据Gregor Biswanger的回答,有一个名为Electron.NET的NuGet程序包。
Electron是一个框架,允许您在Node.js之上构建本机GUI应用程序。 Electron.NET是一个NuGet软件包,可让您从.NET Core代码中利用Electron和Node.js。
好消息是,您不必学习JavaScript,Electron或Node.js即可使用NuGet包。 JS文件确实可以在您的应用程序内部运行,但是它们会在构建过程中自动生成。
您要做的就是构建一个非常标准的ASP.NET Core MVC应用程序。唯一的区别是,它不是在浏览器中运行,而是作为本机窗口应用程序运行。除了仅针对Electron.NET软件包的几行代码外,您无需学习ASP.NET Core MVC以外的任何知识。
This page提供了有关如何使用它的教程。它还包含一些指向示例代码存储库的链接。
答案 13 :(得分:1)
答案 14 :(得分:1)
它将使用 .NET 6 提供: https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-1/
但是您已经可以使用 netcore 3.1 和 net 5(至少在 Visual Studio 2019 16.8.4+ 中)创建 WinForms 应用程序。
答案 15 :(得分:0)
如果您有耐心,随着 .net 6.0 的推出,.net maui 有时会在秋季推出!
那应该很棒!
答案 16 :(得分:0)
自Visual Studio 2019 16.6起,Windows窗体(及其视觉设计器)就已经可用于.NET Core(作为预览)。很好,尽管有时我需要打开Visual Studio 2019 16.7预览版来解决烦人的bug。
请参阅此博客文章: Windows Forms Designer for .NET Core Released
此外,Windows窗体现在是开源的:https://github.com/dotnet/winforms
答案 17 :(得分:0)
如果您使用的是.NET Core 3.0及更高版本,请执行以下步骤,您会很方便:(我将使用.NET Core CLI,但您也可以使用Visual Studio):
md MyWinFormsApp
可选步骤 cd MyWinFormsApp
可选步骤 dotnet new sln -n MyWinFormsApp
可选步骤,但这是个好主意 dotnet new winforms -n MyWinFormsApp
很抱歉,这不是可选的 dotnet sln add MyWinFormsApp
如果执行了步骤3,则执行此操作 好的,您可以停止阅读我的答案,然后开始向MyWinFormsApp
项目添加代码。但是,如果您想使用 Form Designer ,请继续阅读。
MyWinFormsApp.csproj
文件并将<TargetFramework>netcoreapp3.1<TargetFramework>
更改为<TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
(如果您使用的是netcoreapp3.0
,请放心。将其更改为<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
)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>
#if NETCOREAPP3_1
Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif
现在您可以使用Visual Studio 2019打开MyWinFormsApp
项目(我也可以使用Visual Studio 2017,但我不确定)并双击{{1 }},您应该看到以下内容:
好的,打开工具箱( Ctrl + W , X ),然后开始向您的应用程序添加控件并使它漂亮。
您可以在 Windows Forms .NET Core Designer 中了解有关设计师的更多信息。
答案 18 :(得分:0)
不断创新。
对于现有WinForms应用程序的特殊情况:
有一种方法-尽管我不知道它的效果如何。
像这样:
从mono获得WinForms实现。
将其移植到.NET Core或NetStandard。
根据新的System.Windows.Forms重新编译WinForms应用程序。
修复NetCore可能破坏的所有内容。
为单声道完美实现您所需的零件祈祷。
(如果没有,您总是可以停止祈祷,并向单项目发送带有修复/补丁/功能的拉动请求)
这是我的CoreFX WinForms存储库:
https://github.com/ststeiger/System.CoreFX.Forms