问题描述
我正在创建一个Xamarin.Forms应用程序,该应用程序通过RS232-> USB从外部设备读取数据。我一直在寻找如何从串行端口读取并运行到System.IO.Ports,它说它可以与.netstandard2.0一起使用,并具有MonoAndroid1.0,MonoTouch,Xamarin.iOS等支持。我正在运行Xamarin 4.8版(即将升级到5版),该版在针对Android 8+时实现了netstandard2.0,而我针对9版,所以我不确定为什么这不起作用。当我尝试更新串行端口时,它会引发异常
System.PlatformNotSupportedException: 'System.IO.Ports is currently only supported on Windows.'
更令人困惑的是,MS Doc网站说它支持 .NET Framework 2.0-4.8 .NET平台2.1-5.0 Xamarin.Mac 3.0
Nuget软件包说它支持 .netstandard 2.0 .netcoreapp2.1 单机器人 单点触控 xamarin.mac xamarin.ios
github页面具有针对linx,mac,windows等的实现,所以不确定为什么该异常仅针对Windows明确说明。
Microsoft Doc网站:https://docs.microsoft.com/en-us/dotnet/api/system.io.ports.serialport?view=dotnet-plat-ext-5.0
Github:https://github.com/dotnet/corefx/tree/master/src/System.IO.Ports/src/System/IO/Ports
Nuget软件包:https://www.nuget.org/packages/System.IO.Ports/
解决方法
因为Xamarin.Forms使用.Net Standard作为目标框架。 .Net标准不支持System.IO.Ports。
您可以改用UsbDeviceConnection
。此类用于向USB设备发送和接收数据以及控制消息。有关更多详细信息,请检查MS文档。 https://docs.microsoft.com/en-us/dotnet/api/android.hardware.usb.usbdeviceconnection?view=xamarin-android-sdk-9
您可以从下面的链接下载源文件。 Xamarin.Forms: Read Data using UsbDeviceConnection Library