关于.net5和下半年推出的.net6的一些问题

ilikeff8 2021-03-23 08:58:36
之前报道是 .net5不支持winform,wpf,虽然现在vs2019最新版本也推出了他们的编辑器,而.net6也退出了第2个预览版,年底就要推出正式版,那.net6下能实现真正的跨平台,不知道他的那个MAUI到底是啥,是基于xaml的吗
如果现在项目转移到.net5,为.net做准备的话,那有些可能是.net framework windows下面的东西该如果处理(这些虽然现在依旧可以在.net5里引用,但明显一旦引用就是混合编程了,类似之前的.net framework+.net core, .net5/6 下,dotnet虚拟机能直接在linux上模拟实现出来这些功能吗
1 具体就是windows api,wmi,共享目录访问,windows服务(是不是必须改用worker service)
2 以后用blazor server/blazor webassmembly+grpc是不是ms的主推方向了
...全文
3065 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilikeff8 2021-04-13
  • 打赏
  • 举报
回复
引用 14 楼 以专业开发人员为伍 的回复:
你的第一个问题其实我已经说了,windows系统下的相关机制已经移植到 linux 下实现,这是通过 .net 来实现的。如果你非要纠结“windows api”这就是在 net 下纠结 c 底层了。 至于 blazor assembly,它是 web 前端技术。如果你满脑子只有桌面窗口概念,那么是另外一个问题。所以 .net6 的跨平台桌面开发技术跟 webassembly并不在同一个频道上。 对于 blazor assembly 来说,你可以随便找一个web 服务器(例如 nginx)传上去一堆文件,然后任意一个可以从其下载文件的浏览器进程都能开始运行 c# 的客户端网页应用系统,这个网页上跑的是 .net5 各类框架,包括自己开发的c#编写的业务框架、websocket框架、微软的机器学习框架等等,都跑在浏览器客户端。
因为我做的是物联网平台产品,会设计到各种通讯协议和通讯方式,要和硬件打交道,也会用到官方或第三方的一些厂商DLL,或是nuget包,这块我也不清楚能兼容多少,甚至三菱CNC还有必须要注册他们的COM组件的,这块是不是就无法跨平台了
ilikeff8 2021-04-13
  • 打赏
  • 举报
回复
引用 13 楼 以专业开发人员为伍 的回复:
在 .net5 下,我们编写控制台服务程序,在各种“乱七八糟的 linux 环境下”稳定地跑很长时间,速度飞快,各种 .net 服务框架(包括你自己写的各类框架)也都能使用到,已经完全用不着别的体系的东西了。你只是不用 winform、wpf 而已。 所以我说 .net 6 如果解决跨平台的优秀的交互图形窗口界面开发,你就不用 Q之类的东西了,是个很大的进步!
windows服务我已经替换成worker service,安装和开发也挺方便的,但我不知道他有没有所谓的sever0权限问题,我原来.net4版本下,windows服务里要启动其他外部进程的时候,如果在win10下,会造成新进程里进行操作的权限不够,我调用了windows api WTS取获取当前登录的administrator管理员权限,用管理员启动进程,才让新启动的进程拥有了管理员权限,而移植到.net5后,我想扔掉所有的windows api,但不知道会不会遇到权限问题
  • 打赏
  • 举报
回复
你的第一个问题其实我已经说了,windows系统下的相关机制已经移植到 linux 下实现,这是通过 .net 来实现的。如果你非要纠结“windows api”这就是在 net 下纠结 c 底层了。 至于 blazor assembly,它是 web 前端技术。如果你满脑子只有桌面窗口概念,那么是另外一个问题。所以 .net6 的跨平台桌面开发技术跟 webassembly并不在同一个频道上。 对于 blazor assembly 来说,你可以随便找一个web 服务器(例如 nginx)传上去一堆文件,然后任意一个可以从其下载文件的浏览器进程都能开始运行 c# 的客户端网页应用系统,这个网页上跑的是 .net5 各类框架,包括自己开发的c#编写的业务框架、websocket框架、微软的机器学习框架等等,都跑在浏览器客户端。
  • 打赏
  • 举报
回复
在 .net5 下,我们编写控制台服务程序,在各种“乱七八糟的 linux 环境下”稳定地跑很长时间,速度飞快,各种 .net 服务框架(包括你自己写的各类框架)也都能使用到,已经完全用不着别的体系的东西了。你只是不用 winform、wpf 而已。 所以我说 .net 6 如果解决跨平台的优秀的交互图形窗口界面开发,你就不用 Q之类的东西了,是个很大的进步!
  • 打赏
  • 举报
回复
我们现在一切都用 .net5,特别是这对一些国有大型企业的框架,要跑在国产linux下,并且只能用国产数据库,一些流行的美国的开源框架也其实是被人诟病的东西。好在我们很多年前对于 UI 就基本转为纯web前端开发(使用typscript),现在由于c# 可以支持web 前端开发所以欣然改回blazor webassembly。因此开发跨平台高性能的前端应用,也没感觉有任何问题。 在 .net6下其实也一样。传统的桌面应用可以移植了,通过少量修改,做到跨平台。你也就用不着什么 QT 之类的开发工具了。
jhonsonzhang 2021-03-26
  • 打赏
  • 举报
回复
但winform程序,比如最新的那个windform app项目还是不能在大多数linux上跑,只能在linux-windows服务器上可以,其它的不行。我是直接用net5.0实践验证过。
jhonsonzhang 2021-03-26
  • 打赏
  • 举报
回复
引用 7 楼 ilikeff8 的回复:
winform后台进程的事情搞定了,现在是用work service代替windows service后,在work service里改为启动console程序,用 sc安装的时候只要不指定交互就不会有控制台窗口,接下来我该如何替换findwindow和GetWindowThreadProcessId呢,我是通过它们找特定的后台进程的,之前是查询特殊的窗体标题获得句柄,.那net5如何获取有指定特征字符串的linux的进程呢,并且还要转换成Process去kill它
跨平台应用,你考虑多了,需要dotnet容器的。部署好dotnet core在linux机器上。就跟在windows上应用一样了,不用刻意再针对性的修改代码。
jhonsonzhang 2021-03-26
  • 打赏
  • 举报
回复
我刚刚完成一个移动端项目,部署在linux-deepin的一个国产服务器上。目前运行还可以。但开发挺艰辛的,感觉core在状态和会话方面还需要进一步简化,太繁琐了,还不如直接用js来得方便。另外前端页面的@html类和方法的使用,还是弱于直接使用js。
ilikeff8 2021-03-26
  • 打赏
  • 举报
回复
winform后台进程的事情搞定了,现在是用work service代替windows service后,在work service里改为启动console程序,用 sc安装的时候只要不指定交互就不会有控制台窗口,接下来我该如何替换findwindow和GetWindowThreadProcessId呢,我是通过它们找特定的后台进程的,之前是查询特殊的窗体标题获得句柄,.那net5如何获取有指定特征字符串的linux的进程呢,并且还要转换成Process去kill它
泡泡龙 2021-03-26
  • 打赏
  • 举报
回复
winform和wpf在.net 6.0依旧只能在windows平台使用
ilikeff8 2021-03-25
  • 打赏
  • 举报
回复
还有就是不我原来服务里去启动其它进程,而其他进程是一个后台winform进程,不显示界面,也不显示在任务栏里,但任务管理器里能看到 如果转成.net5,我放弃掉winform,那我改如何做这个后台进程,而这个后台进程可以不需要处理消息循环(把WM_COPY相关的功能砍掉就没消息循环什么事了),本来想用跨平台的控制台,但控制台如何在不适用windows api的情况下在windows/linux下都能隐藏窗口呢,否则我可能会启动20个不同的后台进程,然后服务器的界面上会有20个窗口。。
ilikeff8 2021-03-25
  • 打赏
  • 举报
回复
引用 3 楼 正怒月神 的回复:
不清楚, 但我觉得winform之类的,更多的可能是产生替代方案。
我有一个插件系统要移植的目标是win/linux都能用,现在正在从.net framework 4.6.1 移植到 .net5 首先,一些和硬件、系统无关的DLL我已经改写成.net5了,这个还是比较简单的 而其中有些windows下的专用技术不知道该如何移植到.net5 1 现在一个总服务已经移植过去了,就是把windows服务替换成了worker service辅助角色服务,windows下的部署:安装,自启动,运行,停止,卸载都是正常的,只是linux下的部署还没试过,但网上有教程,应该也没啥问题 2 但有些windows api 我就不知道该如何移植或替换成双平台都支持的写法了,或者给出linux下.net5写法也行 FindWindow GetWindowThreadProcessId SendMessageTimeout WM_COPY 这些不知道该如何替换写法 下面几个是用来在服务里用当前系统登陆用户的权限来启动其他进程用的,用来突破sevice0,.net5版本里我用worker service我就砍掉这些了,直接Process.Start,也不知道能不能启动linux进程,也不知道权限够不够 WTSEnumerateSessions WTSSendMessage WTSGetActiveConsoleSessionId CreateProcessAsUser CloseHandle 3有些Nuget第三方包也改成.net/.net core 3.1版本的,倒是也没出错 4 而有些WMI调用系统信息的部分,也不知道该怎么移植,比如用WMI获取CPUID。主板ID,网卡MAC地址,当前以太网IPv4的IP列表 5 还有些第三方的设备驱动DLL,没有源码,是.net framework的,不知道能不能在linux下调用到,而且还有固定只能x86的dll 6 哪些tcp,net,http监听等代码直接拷贝过来倒是也没出错,不知道能不能在linux下正常工作 7 不支持串口控件,不知道该用啥替代 感觉还是挺多事情要处理的
JDD1997 2021-03-23
  • 打赏
  • 举报
回复
MAUI 是 xamarin 的改名,是一种使用xaml的ui技术,美好的蓝图是写一次界面,即可在 windows,Android,iphone,ipad,mac,Linux上跑起来.但是微软画的饼,大家都明白的. 很多介绍里面都说它是能同时构建win的桌面端和安卓苹果的移动端,但都没有提到所谓的win桌面端到底是指 WPF 还是 UWP,或是同时支持两者. 感觉上大概率是UWP.
正怒月神 2021-03-23
  • 打赏
  • 举报
回复
不清楚, 但我觉得winform之类的,更多的可能是产生替代方案。
ilikeff8 2021-03-23
  • 打赏
  • 举报
回复
更正2:那.net6下能实现真正的跨平台吗?
ilikeff8 2021-03-23
  • 打赏
  • 举报
回复
更正下:之前报道是 .net5不支持winform,wpf跨平台

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧