如何在.NET Framework/.NET Standard应用中使用UWP类库?
解决.NET Framework调用UWP BLE类库的方案
1. 改用Windows Runtime组件(WinRT Component)
把你的BLE_Module从纯UWP类库改成Windows Runtime组件项目,这类组件是微软设计用来跨UWP、.NET Framework等平台共享的,.NET Framework 4.6.1+(Windows 10 1709及以上,Windows 11完全支持)可以直接引用:
- 创建WinRT组件时,目标版本选
Windows 10, version 1809 (10.0.17763.0),和你之前的UAP版本对齐。 - 把原UWP类库中的BLE核心逻辑迁移过来,只对外暴露必要的操作接口(比如扫描、连接、读写特征值等)。
- 直接在.NET Framework项目里引用这个WinRT组件,你也可以套一层.NET Standard 2.0的适配类来统一业务侧的调用逻辑。
2. 直接在.NET Framework中调用WinRT BLE API
Windows 10 1709+的.NET Framework 4.7.2及以上,原生支持直接调用WinRT的蓝牙API,不用额外写UWP类库:
- 确保你的.NET Framework项目目标框架是4.7.2或更高(右键项目→属性→应用程序里设置)。
- 直接在代码里引用
Windows.Devices.Bluetooth、Windows.Devices.Bluetooth.GenericAttributeProfile等命名空间,编写BLE逻辑。 - 要让项目正确识别WinRT API,需要在
.csproj中添加配置:
<PropertyGroup> <TargetFramework>net472</TargetFramework> <EnableWindowsTargeting>true</EnableWindowsTargeting> </PropertyGroup>
3. COM互操作封装(备选方案)
如果前两种方法受限,可把UWP的BLE逻辑封装成COM组件,再让.NET Framework调用:
- 在UWP项目中,给BLE操作类加上
[ComVisible(true)]特性,实现一个COM可见的接口。 - 生成项目后,注册该COM组件(Windows 11上用
regsvr32或VS自带的注册工具完成)。 - 在.NET Framework项目中添加COM引用,直接调用接口方法。
原引用报错的原因
UWP类库(目标为uap)依赖UWP专属的运行时环境,.NET Framework和.NET Standard项目无法直接引用;而WinRT组件是专门为跨平台共享设计的,编译输出兼容多种Windows平台的应用。
内容的提问来源于stack exchange,提问作者Thern
相关产品推荐
相关产品推荐

