V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luffy
V2EX  ›  Windows

windows C# 开发 sdk 下载的兼容性问题

  •  
  •   luffy · 2022-12-16 12:31:48 +08:00 · 2237 次点击
    这是一个创建于 712 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微软 nuget 这些 SDK 看起来并不是在什么平台都能使用? 比如创建一个 maui 项目,想引入 Microsoft.Windows.SDK.NET.Ref 提示安装不了,有兼容性问题, 我的是 win11 。

    如果想调用 Windows.devices.bluetooth 这种跟硬件相关的 API , 一般要创建什么样的项目了?需要引入哪个包? 看网上一些资料,还要自己手动加 C 盘下的一些 dll 文件?

    21 条回复    2022-12-26 10:04:59 +08:00
    sinnosong1
        1
    sinnosong1  
       2022-12-16 13:36:01 +08:00
    看看.net standard,.net core,.net ,.net framework 的区别吧。
    god7d
        2
    god7d  
       2022-12-16 14:01:49 +08:00
    OP 看起来像是.Net 的初学者,不如把自己的需求发出来让大家给你简单说一下你应该怎么做
    luffy
        3
    luffy  
    OP
       2022-12-16 16:33:17 +08:00
    @god7d 是初学者,假设要做蓝牙相关的开发,推荐用什么类型的项目了?

    .net framework 4.8 会不会太老了?
    dotnet core maui 好像没法用来做 win 设备相关的开发?

    所以只能是 uwp?
    但听说 uwp 已经被微软弃用,改成是 windows app sdk?
    https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/
    这个 windows app sdk 看起来并没有 device 相关的 API, 所以也不能直接用。

    这也是让我很困惑的地方,微软推出的平台, sdk 种类繁多,但能跟硬件打交道比较好的好像是 uwp 比较友好?
    noErr
        4
    noErr  
       2022-12-16 16:46:03 +08:00
    @luffy 没做过相关的,但是 4.8 哪来跑 deivce 应该没得问题,其他的都太新了,不建议踩坑吧
    god7d
        5
    god7d  
       2022-12-16 16:48:42 +08:00
    @luffy 不清楚你项目的具体形式,如果是最终呈现的是桌面软件的形式的话,推荐你用 winform 或者 wpf ,做这个的话不需要技术很新,要的是稳定,所以.net framework 4.8 是完全没有问题的。其实工业项目不太需要纠结使用.net core 还是.net framework ,直接使用.net framework 即可。

    如果只是服务等没有界面的话,也推荐你使用.net framework ,基本上在 win 上做开发无需考虑.net core
    crazytudou
        6
    crazytudou  
       2022-12-16 17:18:42 +08:00
    @luffy 使用 nuget 引入时注意选下版本,看下依赖,.net 版本并不是越新越好,特别是针对硬件的开发,选个你熟悉的。
    clorischan
        7
    clorischan  
       2022-12-16 20:12:19 +08:00
    @luffy
    在 UWP 与 WinUI3 中是原生支持 Windows.Devices.Bluetooth 下的 API 操作的
    WinForm 与 WPF 需要添加相关依赖才可以使用

    个人建议的话就是 WPF / WinUI3,
    clorischan
        8
    clorischan  
       2022-12-16 20:17:47 +08:00
    MAUI 是跨平台开发框架, 在 Windows 下生成的是 WinUI3
    虽然可以编写特定平台代码调用完整的 WinUI3 的 API, 但是并不方便, 不如直接 WinUI3
    Jirajine
        9
    Jirajine  
       2022-12-16 20:40:19 +08:00
    @god7d 2022 年都要过去了,现在还推荐 dotnet framework 是否有点😅
    Damn
        10
    Damn  
       2022-12-17 00:06:37 +08:00 via iPhone
    @Jirajine 桌面又不是前端,那么卷干什么。系统内置 framework ,对终端用户不挺好?
    learningman
        11
    learningman  
       2022-12-17 00:29:37 +08:00
    @clorischan #7 WinUI3 感觉一团糟,官方的 demo 跑完出来的是 WinUI2.6...
    jim9606
        12
    jim9606  
       2022-12-17 01:35:58 +08:00
    .NET 库兼容性和可移植性上,netstandard2.0 是最佳选择,这个目标被所有 netframework 、netcore 、net5+支持。
    我见过的几个需要访问 Win32 API 的.NET 应用,通常是拿到非托管 DLL (系统 DLL 或者 SDK 提取的),然后根据 C 接口用 C#自己写一个 P/Invoke wrapper 来调 DLL 的方法。这样你的主应用想用什么版本的.NET 都行。如果担心 WinUI3 没成熟的可以考虑.NET6/7+WinUI2 。
    这个 wrapper 可能有现成库可以用,nuget 包通常会捆绑相应的非托管 DLL 。
    jim9606
        13
    jim9606  
       2022-12-17 01:59:06 +08:00
    @jim9606 我好像搞错了一部分,.netstandard2.0 能覆盖大部分受支持的.NET 实现,通常如果希望库在大部分.NET Framework 和所有未来.NET 版本兼容会选这个作为目标。
    通常可以认为平台 Win32 API 功能最齐全,不过想要易用性我就不在行了,看有没有搞这行的大佬了。
    netnr
        14
    netnr  
       2022-12-17 07:38:45 +08:00 via Android
    .NET Framework 3.5 SP1 停止维护时间为 2029 年 1 月 9 日,而 4.6 4.7 4.8 停止维护时间还待定,起步十年吧

    再看 .NET 6 7 8 最多三年就停止维护了
    charlie21
        15
    charlie21  
       2022-12-17 09:22:50 +08:00 via Android
    的确 如果推荐处处求新呢那你也太不了解微软啦
    clorischan
        16
    clorischan  
       2022-12-17 11:06:11 +08:00
    @learningman 2.6 不是 UWP 么

    https://github.com/microsoft/WinUI-Gallery
    WinUI3 官方控件示例.
    learningman
        17
    learningman  
       2022-12-17 19:26:36 +08:00 via Android
    @clorischan 是啊,所以搞得很迷惑。
    我是新上手的,那个 packaged 我也搞不清。。。
    ikas
        18
    ikas  
       2022-12-18 03:03:55 +08:00
    1.系统提供 api : winrt api(各种新 api) 与 win32 api,且目前 win32 环境可调用 winrt
    2.应用模型: win32 应用(可以调用 winrt,win32 api)与 uwp 应用(调用 winrt)
    3.ui 库: winui2(win32,uwp 可用) ,winui3(win32 可用),wpf(几乎不再维护,win32 可用),winform(win32 可用,忘记吧)
    以上不限定语言,如 cpp , .net 均可以使用(c#,vb.net 等语言)


    再来说.net
    1. .NET Framework (已经废弃)
    2. .netstandard(为了兼容各种形态.net(如(uwp .net core),.net framework,.net core )的过度产物,已废弃),
    3. .net core 开源且持续开发中, 直接用

    再来说 windows app sdk
    windows app sdk 不是一个程序模型,而是一套组合 api,方便你联合使用 winui3,winrt,win32 等等,并不是一个必须的东西


    再来 MAUI
    maui 是.net core 跨平台 ui,windows 中使用 winui3 实现


    所以你需要的是 winrt api...然后选择一个开发模型即可
    1.uwp ( winrt,winui2)
    2.net core + host winui2 + winrt

    3.net core + wpf + winrt
    4.windows app sdk (winui3,winrt,win32)

    5.其他.net 开源 ui+ winrt

    6.MAUI 不推荐
    luffy
        19
    luffy  
    OP
       2022-12-19 15:28:32 +08:00
    @ikas

    我这边最重要的部分是跟蓝牙硬件的交互,至于 UI 部分是最为次要的,甚至完全不重要的部分.
    目前看了一圈好像 UWP 在这方面文档比较齐全啊
    https://learn.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothdevice?view=winrt-22621

    youtube 看了一圈,有一些关键这方面蓝牙开发的,基本是用的.net framework, 而且还要自己从系统盘引入一些 dll 。 我就很不理解 ,像蓝牙这种这么标准的模块,为何 .net core 不能自带? 或者在 nuget 上可以下接下载兼容到 dotnet core 上。竟然还要自己去引入 dll?
    Bronts
        20
    Bronts  
       2022-12-24 20:50:40 +08:00
    刚好在找你说的类似解决方案,供参考:
    1 、UI 可以使用 Blazor Hybrid: https://learn.microsoft.com/zh-cn/aspnet/core/blazor/hybrid/?view=aspnetcore-7.0
    2 、蓝牙用第三方库: https://www.nuget.org/packages/InTheHand.Net.Bluetooth/
    luffy
        21
    luffy  
    OP
       2022-12-26 10:04:59 +08:00
    @Bronts 这个蓝牙第三方库的源码我看过了,dotnet core 只支持到 3.0 还是 3.1
    事实上这个第三方库会有问题,如果 需要一些定制化的话,会很麻烦。所以目前这个源码只能做为思路上的参考,不太好直接用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:15 · PVG 12:15 · LAX 20:15 · JFK 23:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.