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

从.Net Framework项目引用.Net Standard GDAL库报错如何解决?

GDAL.Core跨框架引用报错解决方案

问题场景:引用了Gdal.Core 2.3的.NET Standard 2.0类库,在.NET 5+项目可正常运行,但在.NET Framework 4.7.2项目中引用时先后出现Gdal.Core dll not found、Unable to find an entry point named 'CSharp_OSGeofGDAL_AllRegister___'报错

  • 第一步:修正.NET Framework项目兼容配置
    确认.NET Framework 4.7.2项目的app.config/web.config中已添加.NET Standard绑定重定向,在<runtime>节点下插入如下配置:
    <dependentAssembly>
      <assemblyIdentity name="netstandard" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    
    同时打开项目属性的「生成」页签,将平台目标统一设置为x64或x86,禁用Any CPU模式,GDAL原生绑定与平台强相关,平台不匹配会直接导致dll加载失败。
  • 第二步:统一使用NuGet管理依赖
    禁止手动复制Gdal.Core.dll到.NET Framework项目,在.NET Standard类库和.NET Framework 4.7.2项目中同时安装相同版本的MaxRev.Gdal.Core包,NuGet会自动处理原生依赖的复制逻辑,无需手动干预。2.3版本官方GDAL包对.NET Framework的.NET Standard兼容支持存在已知缺陷,更换为社区维护的MaxRev分支可解决多数兼容问题。
  • 第三步:调整GDAL初始化逻辑
    在.NET Framework项目的入口位置(如控制台项目Program.cs的Main方法开头、Web项目Global.asax的Application_Start方法中),显式配置GDAL路径后再执行初始化:
    using OSGeo.GDAL;
    using OSGeo.OGR;
    using System.IO;
    using System;
    
    // 初始化代码
    Gdal.SetConfigOption("GDAL_DATA", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "gdaldata"));
    Gdal.AllRegister();
    Ogr.RegisterAll();
    
  • 第四步:排查原生依赖缺失问题
    如果仍出现入口点找不到报错,检查项目输出目录下是否存在gdal_wrap.dll文件:该文件是承载C#调用入口的核心原生依赖,Gdal.Core.dll仅为托管层封装,该文件缺失或版本不匹配会直接触发入口点异常。如果输出目录没有该文件,可在.NET Framework项目中额外安装对应平台的MaxRev.Gdal.WindowsRuntime包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:02