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

MVVMCross(.NET Standard类库)调用Serial port抛出FileNotFoundException异常

问题根因

该异常和MvvmCross框架机制无关,属于.NET Standard类库引用平台相关NuGet包的典型部署问题:.NET Standard 2.0本身没有内置串口实现,安装System.IO.Ports包后,如果只在核心类库项目添加包引用,构建时不会自动将串口相关的运行时程序集传递到作为启动项的WPF项目输出目录,CLR加载SerialPort类型时找不到对应实现程序集,就会抛出System.IO.FileNotFoundException。

排查步骤
  • 开启Visual Studio的Common Language Runtime Exceptions中System.IO.FileNotFoundException的「抛出时中断」开关,复现异常后查看异常详情里的FusionLog(程序集绑定日志),可以直接定位到缺失的具体程序集名称、版本以及CLR的搜索路径,绝大多数场景下日志会明确提示缺失System.IO.Ports.dll。
  • 检查WPF启动项目的NuGet引用列表,确认是否安装了System.IO.Ports包,核心类库添加的包引用默认不会自动流向上层启动项目,这是该问题出现的最常见原因。
  • 核对核心类库和WPF项目安装的System.IO.Ports版本号,版本不一致也会导致程序集加载匹配失败。
解决方案
  • 最直接的处理方式:在WPF启动项目上安装和核心类库完全相同版本的System.IO.Ports NuGet包,清理解决方案后重新生成即可。启动项目持有包引用时,构建流程会自动把串口相关的运行时文件拷贝到输出目录。
  • 如果不希望在WPF项目直接添加串口包引用,可以修改核心类库的项目文件,调整包引用的传递属性:右键核心类库项目选择「编辑项目文件」,找到System.IO.Ports对应的PackageReference节点,添加PrivateAssets="none"配置,让包引用可以正常传递到上层引用项目:
<PackageReference Include="System.IO.Ports" Version="对应你安装的版本号">
  <PrivateAssets>none</PrivateAssets>
</PackageReference>

修改保存后重新生成解决方案即可。

  • 兼容性注意事项:如果你的WPF项目是基于.NET Framework而非.NET Core/.NET 5+,建议选择4.7.x版本的System.IO.Ports包,高版本包附带的运行时依赖在.NET Framework环境下更容易出现加载失败问题。

内容的提问来源于stack exchange,提问作者bjtBatu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:48:20