如果您还没有机会探索.NET Core 3的新功能,请与框架中的专家一起阅读,以了解它带来的内容。
也许你已经听说过或读过微软将WinForms和WPF带到.NET Core 3.0这一事实。也许你已经看过Connect会议上的演示文稿,或者当Scott Hanselman展示如何在.NET Core上运行一个非常古老的WPF应用程序时的任何其他会议或录制。我看了一个演示,他在.NET Core上运行 BabySmash。
![7cf1a0c962a6d7029716e06c808870e2.png](https://i-blog.csdnimg.cn/blog_migrate/d46cd4a8033da87ed0b391a9b97b32ac.jpeg)
.NET Core上的WPF和WinForms?
我真的很想知道这一步,即使是因为我在几个月前为德国.NET杂志撰写了一篇文章,我提到微软不会为.NET Core构建一个UI堆栈。社区还构建了一些其他UI堆栈。最受欢迎的是Avalonia。
但无论如何,这一步是有道理的。由于.NET标准将.NET Core的API更多地移动到.NET框架的同一级别,因此使API几乎相等只是一个时间问题。WPF和WinForms基于.NET库,因此它应该在.NET Core上运行。
这是否意味着它在Linux和Mac上运行?
不!由于WinForms和WPF在后台仅使用Windows技术,因此无法在Linux或Mac上运行。它真的依赖于Windows。在.NET Core上运行它的意义在于性能并且独立于任何框架。.NET Core针对性能进行了优化,因此您可以在云中运行超快的Web应用程序。.NET Core也独立于计算机上安装的框架。只需将运行时与应用程序一起部署即可。
您现在可以运行快速且独立的Windows桌面应用程序。那真棒,不是吗!?
.NET CLI
每次我安装新版本的.NET Core运行时,我都会尝试,dotnet new而且我对这次看到的内容感到非常震惊:
![3a2f449c26909fad71efc225d365eb3c.png](https://i-blog.csdnimg.cn/blog_migrate/0d3e4fd78e6b45263aabc2dc85d75bfc.jpeg)
您现在可以使用.NET CLI创建Windows窗体或WPF应用程序。这很酷。我肯定需要尝试一下:
dotnet new -n WpfTest -o WpfTest dotnet new -n WpfTest -o WpfTest
是的,它正如您在Visual Studio代码中看到的那样工作:
![fab779038a6375b8b34b7f0003b74fa1.png](https://i-blog.csdnimg.cn/blog_migrate/7adaabba6b9e9df77ee11d3f4aeb7108.jpeg)
这是VS Code中的WinForms项目
![ca529d94b60a37eff57753e2b9ce2ff0.png](https://i-blog.csdnimg.cn/blog_migrate/3257fd467343f8283684654ffabc7d5e.jpeg)
dotnet run
在WPF项目上运行:
![be5bad5977ba232f4cad90dd1d9782c7.png](https://i-blog.csdnimg.cn/blog_migrate/970aaf8d111b6fd34859a75185836d53.jpeg)
再次在WinForms GUI上:
![3be4a59c4952e2bd9a64b8bfb1824005.png](https://i-blog.csdnimg.cn/blog_migrate/9bd479a31ac3aeb11459854fe466d2fb.jpeg)
IDE
Visual Studio Code不是此类项目的正确编辑器。如果你很了解XAML,它会工作,但WinForms肯定不会很好。您需要手动编写设计器代码,并且还没有任何设计器支持。也许未来会有一些,但我不确定。
在.NET Core上使用WinForms和WPF的最佳选择是Visual Studio 2017或更新版本。
最后的话
我不认为我现在会开始在.NET Core 3上编写桌面应用程序,因为我是一个网络人。但是在.NET Core上构建这样的应用程序是一个非常好的选择。
顺便说一下:即使EF 6也可以在.NET Core 3中运行,这意味着您也不需要重写桌面应用程序的数据库访问部分。
正如我所写,您现在可以使用这个超快速框架和创建自包含应用程序的选项。我建议你尝试一下并玩弄它。你有一个基于WPF或WinForms的旧桌面应用程序吗?我很想知道你是否可以在.NET Core 3上运行它。告诉我让它在.NET Core 3上运行是多么容易。