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

.NET Framework4.6的VB.NET引用System.IO.Ports.Mono启动崩溃求解

问题根因
  • 你替换使用的System.IO.Ports.Mono是面向.NET Standard 2.0编译的版本,它在Windows平台下的GetPortNames方法实现,依赖独立分发的Microsoft.Win32.Registry 4.1.3.0版本程序集读取注册表枚举串口列表。
  • .NET Framework 4.6虽然兼容.NET Standard 2.0,但它内置的注册表相关程序集属于框架原生组件,版本、公钥标记都和该Mono库依赖的NuGet分发包不匹配,且不会自动把对应版本的独立dll输出到编译目录。
  • 如果你是直接引入源码或手动添加dll引用该Mono库,没有通过包管理工具安装带依赖声明的正式包,Visual Studio不会自动还原它的依赖项,最终运行时找不到对应程序集就抛出FileNotFoundException。
解决方法

按优先级从高到低选择以下方案:

  • 安装缺失的依赖包
    打开项目的NuGet包管理器,搜索安装Microsoft.Win32.Registry 4.1.3版本,重新编译项目即可。也可以直接在包管理器控制台执行以下命令:
    Install-Package Microsoft.Win32.Registry -Version 4.1.3
    
    安装完成后找到项目引用列表里的Microsoft.Win32.Registry,确认它的复制本地属性设置为True,保证编译后dll会出现在输出目录。
  • 配置程序集绑定重定向
    如果安装完依赖后仍提示版本不匹配,打开项目的app.config配置文件,在<runtime>节点下添加如下绑定规则,让运行时自动将对4.1.3.0版本的引用映射到实际部署的版本:
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
      </dependentAssembly>
    </assemblyBinding>
    
  • 换回框架原生串口库(仅Windows场景推荐)
    这个Mono移植版的主要作用是提供非Windows平台的串口支持,如果你的应用只在Windows系统运行,直接使用.NET Framework 4.6自带的System.IO.Ports是更稳定的选择,不会出现额外依赖缺失问题。
  • 手动补全依赖
    如果不想安装NuGet包,可以手动找到对应版本的Microsoft.Win32.Registry.dll,放到项目编译输出目录,同时确认项目目标平台架构(x86/x64/Any CPU)和dll的架构匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:09:30