You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8.0在Raspbian/Linux运行System.IO.Ports报仅支持Windows错误求助

解决.NET 8在Raspbian/Linux上System.IO.Ports的"仅支持Windows"错误

问题背景

在Raspbian/Linux环境运行基于.NET 8.0的应用时,调用System.IO.Ports.SerialPort的带IContainer参数构造函数抛出异常:

System.IO.Ports is currently only supported on Windows.

此前相同配置的项目可正常运行,尝试安装System.IO.Ports 9.0.8/9.0.9版本均无效,Wisej.net组件已排除关联问题。错误堆栈指向Form1.Designer.vb第29行的Me.SerialPort1 = New System.IO.Ports.SerialPort(Me.components)代码。

解决方案

1. 匹配System.IO.Ports包与.NET版本

当前使用的9.x系列System.IO.Ports包是为.NET 9设计的,与.NET 8存在兼容性问题。卸载现有版本,安装8.x系列的对应包(如8.0.1),确保包版本与你的.NET 8 runtime完全对齐。

2. 替换不兼容的构造函数重载

带IContainer参数的SerialPort构造函数在Linux平台的实现中未被支持,需修改初始化代码:

' 原代码
Me.SerialPort1 = New System.IO.Ports.SerialPort(Me.components)

' 修改为
Me.SerialPort1 = New System.IO.Ports.SerialPort()
Me.components.Add(Me.SerialPort1) ' 手动将组件加入容器,保证生命周期管理

注意:若后续通过Visual Studio设计器修改窗体,可能会自动恢复原代码,建议在Form的业务代码文件中手动初始化SerialPort,避免依赖设计器生成的代码。

3. 检查项目目标框架配置

打开项目的.vbproj文件,确认目标框架为跨平台的net8.0,而非Windows特定的net8.0-windows:

<TargetFramework>net8.0</TargetFramework>

Windows特定框架会强制启用Windows兼容层,导致跨平台API失效。

4. 清理重建项目

  • 清理NuGet缓存:执行终端命令 dotnet nuget locals all --clear
  • 删除项目目录下的bin和obj文件夹
  • 重新执行 dotnet restore 和 dotnet build 命令

内容的提问来源于stack exchange,提问作者Alex Bäumler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:13:15