.NET Framework桌面应用遇System.PlatformNotSupportedException问题求助
解决.NET Framework桌面应用中WinRT不支持的BLE问题
问题根源
VS2019及以后版本的.NET Framework项目默认禁用了WinRT API访问,而VS2015的项目模板默认允许该访问,这是导致差异的核心原因。你使用的Windows.Devices.Bluetooth系列API属于WinRT范畴,在桌面应用中需要额外配置才能启用。
可行解决方案
1. 完善WinRT支持的项目配置
在你的.NET Framework桌面项目的.csproj文件中,添加完整的WinRT启用配置,而非仅设置版本号:
<PropertyGroup> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <!-- 替换为你的实际框架版本 --> <TargetPlatformVersion>10.0.19041.0</TargetPlatformVersion> <!-- 推荐使用较新的Win10版本号 --> <EnableWindowsRuntimeSupport>true</EnableWindowsRuntimeSupport> </PropertyGroup>
关键配置项是EnableWindowsRuntimeSupport,仅添加版本号不足以启用WinRT支持。
2. 迁移到.NET 6+桌面应用
若允许升级项目框架,建议迁移至.NET 6或更高版本的WPF/Windows Forms项目。.NET Core及后续版本原生支持WinRT API,无需额外配置,对BLE的兼容性也更优。
3. 使用.NET Framework兼容的BLE替代库
如果不想修改项目框架或配置,可改用专为.NET Framework设计的BLE库,比如:
- 32feet.NET:老牌蓝牙库,全面支持.NET Framework,无需依赖WinRT
- BlueDot:轻量BLE库,兼容多种.NET框架版本
4. 检查项目类型的隐藏配置
部分VS2019/2022创建的桌面项目可能存在隐藏配置阻止WinRT访问,可尝试:
- 右键项目 → 属性 → 应用程序 → 确保“目标平台”选择x64或x86(Any CPU可能引发兼容性问题)
- 清理项目并删除bin/obj目录后重新生成
验证步骤
修改配置后重新编译项目,尝试初始化BLE相关API,若仍报错可检查:
- 确认Windows系统版本在Win10 1507以上(WinRT BLE API的最低要求)
- 若为桌面桥接应用,需在Package.appxmanifest中添加蓝牙权限声明
内容的提问来源于stack exchange,提问作者York Hwe
相关产品推荐
相关产品推荐

