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

.NET Core项目加载外部DLL时寻找低版本依赖组件问题排查

问题分析与解决方案

核心原因

  • 程序集版本与NuGet版本不一致:多数NuGet包采用语义化版本号,但部分包会将程序集版本固定为「主版本.0.0.0」格式。比如System.IO.Abstractions 17.2.3的NuGet包版本是17.2.3,但编译生成的程序集版本可能是17.0.0.0。你的外部DLL编译时引用的是这个程序集版本,而非NuGet包显示的版本号,导致运行时寻找17.0.0.0。你可以右键查看17.2.3版本的System.IO.Abstractions.dll属性→详细信息,对比「文件版本」和「程序集版本」确认这点。
  • .NET Core中绑定重定向配置无效:你添加的<AutoGenerateBindingRedirects>是.NET Framework的配置逻辑,.NET Core/.NET 5+默认使用依赖项解析机制,除非是兼容模式的旧版项目,否则该配置不会生效。
  • 依赖项版本未统一:项目中可能存在其他间接依赖组件强制要求加载17.0.0.0版本,或者NuGet还原时未正确合并版本,导致运行时无法定位匹配的程序集。

解决办法

  1. 显式指定程序集版本重定向
    在项目的csproj中添加运行时配置选项,强制将旧版本重定向到17.2.3:

    <ItemGroup>
      <RuntimeHostConfigurationOption Include="assemblyBinding:System.IO.Abstractions" Value="17.2.3" />
    </ItemGroup>
    

    或者创建runtimeconfig.template.json文件,添加绑定重定向规则:

    {
      "configProperties": {
        "assemblyBinding": {
          "dependentAssembly": [
            {
              "assemblyIdentity": {
                "name": "System.IO.Abstractions",
                "publicKeyToken": "96bf224d23c43e59",
                "culture": "neutral"
              },
              "bindingRedirect": {
                "oldVersion": "0.0.0.0-17.0.0.0",
                "newVersion": "17.2.3"
              }
            }
          ]
        }
      }
    }
    
  2. 强制统一依赖版本
    在项目csproj中直接显式引用System.IO.Abstractions 17.2.3,让NuGet自动统一所有依赖的版本:

    <PackageReference Include="System.IO.Abstractions" Version="17.2.3" />
    

    执行以下命令清理并重新还原项目:

    dotnet clean
    dotnet restore
    
  3. 检查程序集复制与依赖真实性
    使用ILSpy或dnSpy反编译外部DLL,确认其实际引用的程序集版本。如果17.2.3版本的System.IO.Abstractions.dll程序集版本确实是17.0.0.0,检查项目输出目录是否存在该DLL,确保其「复制本地」属性已开启(在引用的NuGet包属性中设置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:29