更新 现在,我有理由相信您不能在Enterprise LTSB上使用Windows Creator,因为该版本不够高且无法更新!如果有人可以确认这一点,并说明如果可以使用Creator,那么我应该如何开发蓝牙应用程序,将不胜感激。
“找不到Windows运行时类型'Windows.Devices.Bluetooth.GenericAttributeProfile.GattDeviceServicesResult'”
我在开发人员机器上开发了一些示例代码,以通过C#/。Net中的BLE(蓝牙低功耗)进行通信。当我将此发行版文件夹转移到另一台计算机并运行该程序时,当我尝试启动BLE通信时会收到上述消息。我猜想我缺少一些关键的库/ dll(或.NETCore或.Net Framework),但是呢?我搜索了,找不到答案。
一个可能有用的线索(或可能不相关)是在我的项目中,我在目录C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETCore \ v4中引用了System.Runtime.WindowsRuntime。 5.1 \ System.Runtime.WindowsRuntime.dll 另一台计算机没有v4.5.1,而只有v4.5。但是,当我尝试安装v4.5.1时,会被告知我已经有一个较新的版本!也许有人可以告诉我如何在计算机上获取.netcore v4.5.1?
谢谢, 戴夫
更多信息。。在原始项目中,存在带有路径C:\ Program Files(x86)\ Windows Kits \ 10 \ UnionMetadata \ 10.0.17134.0 \ Windows.winmd的引用“ Windows”。 如果您在此使用对象浏览器,则会看到Windows.Devices.Bluetooth.GenericAttributeProfile.GattDeviceServicesResult 我正试图使我的代码在其上运行的系统上也有相同的文件(相同版本)。不知道为什么它在运行时没有“看到”它。
显然,其他人有此问题。参见:Bluetooth LE GattDeviceServicesResult TypeLoadException from WPF application
更多基于研究的信息 我在生产计算机上安装了Visual Studio,以为可以消除开发人员计算机和生产计算机之间的差异。仍然没有运气。但是,我要指出的是,其余的区别之一是我的开发人员计算机具有Windows 10 Pro。生产机器(平板电脑)具有Windows 10 Enterprise 2016 LTSB
答案 0 :(得分:0)
似乎Windows 10 Enterprise不支持Windows.Devices.Bluetooth
命名空间中的很多方法。我为此找到的解决方案要求Windows 10 Enterprise用户配对其BLE设备。这使我们可以使用过时的BluetoothLEDevice.GattServices
属性。我们抓住了TypeLoadException
并回到Windows 10 Enterprise支持的方法。
private async Task<IReadOnlyCollection<GattDeviceService>> GetGattService(BluetoothLEDevice device, Guid uuid)
{
try
{
// Try to get the services async first
return await GetGattServicesAsync(device, uuid);
}
catch(TypeLoadException e)
{
// Not supported in version of windows. Fall back to old way
return GetGattDeviceServices(device, uuid);
}
}
private async Task<IReadOnlyList<GattDeviceService>> GetGattServicesAsync(BluetoothLEDevice device, Guid uuid)
{
var result = await Device.GetGattServicesForUuidAsync(uuid);
if(result.Status == GattCommunicationStatus.Success)
{
return result.Services;
}
return null;
}
private IReadOnlyList<GattDeviceService> GetGattDeviceServices(BluetoothLEDevice device, Guid uuid)
{
var result = device.GattServices.Where(s => s.Uuid == uuid);
if(result != null)
{
return result.ToList().AsReadOnly();
}
return null;
}
在尝试从服务中获取特征时,我们需要做同样的事情。我们不调用GattDeviceService.GetCharacteristicsForUuidAsync
,而是调用GattDeviceService.GetAllCharacteristics()
。我还发现某些PC不支持任何BluetoothLEDevice.GetDeviceSelector()
方法的情况,这在创建观察程序时引起了问题。必须配对设备有点不便。不幸的是,我无法找到任何有关此文件的文档。除了几个here视频之外,他们讨论不再需要配对BLE设备,这使我相信LTSB不支持它。