liuser666
V2EX  ›  C#

开发到一半忍不住吐槽一下 Windows 桌面开发

  •  
  •   liuser666 · Nov 11, 2021 · 8741 views
    This topic created in 1820 days ago, the information mentioned may be changed or developed.
    你知道现在 Window 的开发体验有多割裂吗?

    主推的 UWP 也割裂,很多 win32 的 api 用不了。为什么很多旧的程序不把自己的 UI 界面翻新,因为 UWP 压根抛弃了他们,我系统 api 都没法调我开发个屁。

    于是我就用 WPF 开发了,也割裂。.NET framework 和.Net Core 两种平台,互不兼容哈哈哈真搞笑。人家说的怎样都行指的是都可以兼容,你搞成这样我 Google 搜问题都不好搜。

    winform 等再老的就不谈了,老弃婴了。


    要搞就好好搞一个完备的啊,一堆 win32 api 想隐藏是吧?隐藏了我不如用 macos
    40 replies  •  2022-03-27 15:10:22 +08:00
    sun1991
    sun1991
    Nov 11, 2021
    1
    反正 WPF 只能在 Windows 平台跑, 又不能跨平台, 干嘛用.net core
    .net framework 目前 Windows 都内置了, 省心省力
    liuser666
    liuser666
    OP
    Nov 11, 2021
    2
    @sun1991 当时不了解的时候,选错了 mmp...
    EvanQu
    EvanQu
    Nov 11, 2021
    3
    用 maui 吧
    liuser666
    liuser666
    OP
    Nov 11, 2021
    4
    @EvanQu 卧槽,新思路!我脑袋抽了居然没想到!
    EvanQu
    EvanQu
    Nov 11, 2021
    5
    @liuser666 #4 vs2022 正式版出来了 但是 17.1beta 才内置 正式版是 17.0
    不过自己装下也快
    liuser666
    liuser666
    OP
    Nov 11, 2021
    6
    @EvanQu 我是 preview~~~
    n0th1ng
    n0th1ng
    Nov 11, 2021
    7
    用 WinUI 3
    Maui 在 Windows 下用的是 WinUI 3
    liuser666
    liuser666
    OP
    Nov 11, 2021
    8
    @n0th1ng WinUI3 在 WPF 里用需要 island ,mmp 的就不能原生支持一下。
    n0th1ng
    n0th1ng
    Nov 11, 2021
    9
    @liuser666 摊手
    reallittoma
    reallittoma
    Nov 11, 2021
    10
    .NET Framework 跟 .NET Core 的 WPF API 不是都长一个样吗?运行时不兼容而已
    reallittoma
    reallittoma
    Nov 11, 2021
    11
    @EvanQu #3 vs 2022 里面的 maui 貌似还不能用,新建的项目都没法编译
    liuser666
    liuser666
    OP
    Nov 11, 2021
    12
    @reallittoma 除了运行时不兼容外,很多 nuget 包都不兼容。
    jZH
    jZH
    Nov 11, 2021
    13
    还在用 MFC 的漂过
    reallittoma
    reallittoma
    Nov 11, 2021
    14
    @liuser666 #12 nuget 的话尽量找开源的包吧,自己编译到.NET Core 也不是很费事
    1daydayde
    1daydayde
    Nov 11, 2021
    15
    用 Qt (大雾
    towser
    towser
    Nov 11, 2021
    16
    maui 不支持 win7
    QingXuJiaZhi
    QingXuJiaZhi
    Nov 11, 2021
    17
    Electron 欢迎你,大势所趋,微软自己也用。
    wanguorui123
    wanguorui123
    Nov 11, 2021
    18
    微软的东西就是半壶水,应该是为了维持垄断地位不是技术问题
    ligiggy
    ligiggy
    Nov 11, 2021
    19
    不是很懂,你想说的什么,你想用系统 API 干什么?你有多了解你现在用的技术?真的跟框架有关吗?
    nicknick
    nicknick
    Nov 11, 2021 via Android
    20
    红色:我们要支持国产化,不要用 window 。黑色:去他的充满铜臭味的 os 。
    Sain
    Sain
    Nov 11, 2021
    21
    Electron 吧
    cjw1115
    cjw1115
    Nov 11, 2021
    22
    感觉还是你水平问题,WinRT 的 API 基本上满足绝大多数开发场景。
    liuser666
    liuser666
    OP
    Nov 11, 2021
    23
    @cjw1115 我要获取其他应用窗口的句柄,目的是 title 。GetWindowTextA ,有什么办法吗?
    12101111
    12101111
    Nov 11, 2021
    24
    不用考虑.NET framework 了,微软明确说不更了, 地位就和 Windows 自带的 IE 内核一样了,只是为了兼容性才放在那里
    .NET 6 支持 winUI 也支持 wpf 和 winform, 想用哪个用哪个啊, 都是开源的
    MakHoCheung
    MakHoCheung
    Nov 11, 2021
    25
    @cmdOptionKana 微软的 Teams 都抛弃 Electron ,还大势所趋
    wafm
    wafm
    Nov 11, 2021
    26
    易语言欢迎你
    ECat
    ECat
    Nov 11, 2021
    27
    @jZH
    MyFreeCams??
    reallittoma
    reallittoma
    Nov 11, 2021
    28
    @liuser666 #23 .NET Core 支持 P/Invoke 的,nuget 上也有封装好的包,可以直接用那个
    yuancoder
    yuancoder
    Nov 11, 2021
    29
    微软老传统了
    Dockerfile
    Dockerfile
    Nov 11, 2021
    30
    KeyboardManAnAn
    KeyboardManAnAn
    Nov 11, 2021
    31
    @MakHoCheung Electron 对用户来说, 就是一场灾难啊, 十几个套壳应用一起跑, 那酸爽的感觉, 嗯...
    g00001
    g00001
    Nov 11, 2021
    32
    再强大再万能的东西都有他的局限。
    例如万能的 Python 网上搜一下也有很多跑去用 Python + aardio 做桌面开发。

    .Net 就是房车,复杂就是他的使命。
    要简单和接口自由可以开 aardio 这种小自行车。

    官网上有篇文章《看看短短几句 aardio 代码能做什么》,抠了几段过来:

    aardio 调用原生 API
    -----------------------------------
    ::User32.GetCursorPos({ INT x; INT y; });


    aardio 调用 .Net
    -----------------------------------

    import console;
    import dotNet;
    var System = dotNet.load("System").import("System");
    var uri = System.Uri("https://www.aardio.com")

    console.log( uri.Host );
    console.log( uri.GetHashCode() );


    aardio 调用 Python
    -----------------------------------
    import console;
    import py3;

    var itertools = py3.import("itertools")
    var permutations = itertools.permutations({"a","b","c"});
    var pyList = py3.list(permutations);

    for( item in pyList.each() ){
    console.log(item);
    }


    将任何网络 API 自动导入 aardio
    -----------------------------------
    import web.rest.jsonLiteClient;
    var http = web.rest.jsonLiteClient();

    var countApi = http.api("https://api.countapi.xyz/hit{/domain}{/key}")
    var data = countApi["key"].get();
    forgottencoast
    forgottencoast
    Nov 11, 2021
    33
    开发桌面应用为什么要用 UWP ?这是为了上应用商店才会选这个的呀。
    whi147
    whi147
    Nov 12, 2021 via iPhone
    34
    gtk 那套也能在 window 上跑
    liuser666
    liuser666
    OP
    Nov 12, 2021
    35
    @reallittoma 找到了 PInvoke.User32 这个库,简直神级
    0o0o0o0
    0o0o0o0
    Dec 10, 2021
    36
    @EvanQu MAUI 还是 priview ,bug 太多了,而且模板经常变,不过正式版应该会很好用。
    0o0o0o0
    0o0o0o0
    Dec 10, 2021
    37
    @0o0o0o0 单词拼写错误 preview
    ne6rd
    ne6rd
    Jan 4, 2022
    38
    强烈赞同,API, nuget 包,网上问题用的版本名词,都特别割裂。
    后来我选了 flutter ,开发体验很好,做个桌面小程序还是挺方便的。
    比 Electron 省心。
    coder001
    coder001
    Jan 10, 2022❤️1
    39
    我的观点:

    简单的界面用 WinForms 还是挺方便的

    对界面要求复杂、绚丽的话那就上 CEF ,用 Web 做 UI 无论是环境、技术层面还是对开发人员的要求,兼容性都高

    而且 Blazor WASM 可以直接写 C♯ 输出静态的 Web 站点

    没错,我就是讨厌 JavaScript 而想尽可能用 C♯ 解决全部问题
    lujiaxing
    lujiaxing
    Mar 27, 2022
    40
    现在你可以选择 Avalonia
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2691 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    ♥ Do have faith in what you're doing.