几年来我一直在开发WinForms程序。我现在正在研究.NET Core(包括ASP.NET Core MVC)。我正在寻找新的GUI桌面技术。在Visual Studio 2015更新3中,我看不到任何在.NET Core中制作GUI应用程序的选项。我想念什么?
几年来我一直在开发WinForms程序。我现在正在研究.NET Core(包括ASP.NET Core MVC)。我正在寻找新的GUI桌面技术。在Visual Studio 2015更新3中,我看不到任何在.NET Core中制作GUI应用程序的选项。我想念什么?
Answers:
你什么都没错过。尽管UWP(通用Windows平台)部分构建在.Net Core之上,但MS一直没有提供直接使用.Net Core创建GUI应用程序的合理方法。
尽管仅Windows,.Net Core 3.0包括对Winforms和WPF的支持。
.Net 6将包括.Net MAUI,它将支持Windows和macOS桌面应用程序和移动应用程序,以及社区(非MS)支持的Linux桌面应用程序。.Net 5将包括.Net MAUI的预览版。
对于过去两年中出现的跨平台选项,请参阅其他答案。
您可以使用Electron并将其与Edge.js分别连接。电子边缘。Edge.js允许电子(node.js)调用.net dll,反之亦然。这样,您可以使用HTML,CSS和JavaScript编写GUI,并使用.net核心编写后端。电子本身也是跨平台的,并且基于铬浏览器。
AvaloniaUI现在支持在Win / OSX / Linux上的.NET Core上运行。XAML,绑定和控件模板包括在内。
例如,使用Rider在MacO上进行开发:
New Solution
->(在模板列表的顶部附近)-> More Templates
->按钮Install Template...
->浏览到在步骤1中克隆模板的目录。Reload
按钮New Solution
模板列表中!一种选择是将Electron与JavaScript,HTML和CSS一起用于UI,并构建一个.Net Core控制台应用程序,该应用程序将自行托管Web api以用于后端逻辑。Electron将在后台启动控制台应用程序,从而在localhost:xxxx上公开服务。
这样,您可以使用.Net实现所有后端逻辑,以通过JavaScript的HTTP请求进行访问。
看看这篇文章,它解释了如何使用Electron和.Net Core构建跨平台的桌面应用程序,并在github上检查代码
为了创建基于控制台的用户界面,您可以使用gui.cs。它是开源的(来自Xamarin的创建者Miguel),并且在Windows,Linux和MacO的.Net内核上运行。
它包含以下组件:
截图示例
我们用.net核心编码了一个开源的电子解决方案:Electron.NET。 https://github.com/ElectronNET/Electron.NET
请享用!
.NET Core 3将支持创建Windows桌面应用程序。我昨天在.NET会议上观看了该技术的演示。这是我唯一能找到的博客文章,但确实说明了这一点:https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-桌面应用程序/
tl; dr-我不确定.NET Core开发人员是否有可能提供跨平台GUI框架。
我感觉希望将早期版本的.NET Core的跨平台GUI框架捆绑到官方工具中(尤其是该工具的旧版本-您提到您正在运行VS 2015 Update 3)。
GUI框架确实非常繁重,并且依赖于主机上已经存在的硬件抽象。在Windows上,大多数用户通常使用单个窗口管理器(WM)和桌面环境(DE),但是在受支持的Linux的许多不同发行版上,有许多可能的WM和DE-授予大多数用户将X-Server或Wayland与KDE,Gnome或XFCE结合使用。但是从来没有Linux安装是一样的。
开源社区实际上不能完全依靠VM和DE的“标准”设置,这意味着.NET Core开发人员很难创建可在所有平台及其组合上使用的GUI框架。 DE和WM。
这里的很多人都提出了一些很棒的建议(从使用ASP.NET Core来构建Web应用程序,然后使用浏览器列出许多跨平台框架)。如果查看列出的一些提及的跨平台GUI框架,您会发现它们有多沉重。
但是,隧道的尽头是光明的,因为Miguel de Icaza今年在.NET Conf上展示了Xamarin在Linux和MacOS上天真地运行(2017年,如果您将来会阅读的话),所以可能值得尝试准备好了
(但是您需要从VS 2015升级到VS 2017才能访问.NET Core 2.0功能)
您可以使用.NET Core和MVC开发Web应用程序并将其封装在Windows通用JavaScript应用程序中:https : //docs.microsoft.com/zh-cn/windows/uwp/porting/hwa-create-windows
它仍然是一个Web应用程序,但是它是一种轻量级的方法,可以在不学习新框架或不重新开发UI的情况下将其转换为桌面应用程序,并且效果很好。
是的,有可能。
.NET Core没有现成的本机GUI应用程序任何组件。但是,根据Gregor Biswanger的回答,有一个NuGet软件包称为Electron.NET。
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之上的任何知识。
该页面提供了有关如何使用它的教程。它还包含一些指向示例代码存储库的链接。
死灵法师。
对于现有WinForms应用程序的特殊情况:
有一种方法-尽管我不知道它的效果如何。
它是这样的:
从mono获取WinForms实现。
将其移植到.NET Core或NetStandard。
根据新的System.Windows.Forms重新编译WinForms应用程序。
修复NetCore可能破坏的所有问题。
为单声道完美实现您所需的零件祈祷。
(如果没有,您总是可以停止祈祷,并向单项目发送带有修复/补丁/功能的拉动请求)
这是我的CoreFX WinForms存储库:https :
//github.com/ststeiger/System.CoreFX.Forms
这是一个古老的问题,但是可以,可以使用VSCode,.Net Core,C#,gtk3,gtksharp和Glade作为GUI设计器为Windows,Linux和macOS开发跨平台桌面(GUI)应用程序。
这是怎么回事。
如果您使用.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>
Program.cs
并添加以下预处理器-if#if NETCOREAPP3_1
Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif
现在您可以MyWinFormsApp
使用Visual Studio 2019 打开项目(我想您也可以使用Visual Studio 2017,但我不确定)并双击Form1.cs
,您应该看到以下内容:
好的,打开工具箱(Ctrl+W,X
)并开始向您的应用添加控件并使它漂亮。
您可以阅读有关designer @ Windows Forms .NET Core Designer的更多信息。