C#项目添加GDAL NuGet包后调用Ogr.CreateGeometryFromJson报加载ogr_wrap DLL错误
解决方案
1. 手动调整ogr_wrap.dll的位置
找到NuGet包安装目录下的gdal/x64/ogr_wrap.dll(通常路径类似packages/GDAL.Native.3.7.2/runtimes/win-x64/native/gdal/x64),将其复制到项目输出目录(如bin/Debug/net8.0/x64),和ogr_csharp.dll放在同一层级。也可以在项目中添加该文件,右键设置复制到输出目录为始终复制,实现自动同步。
2. 通过代码添加DLL搜索路径
在调用OGR相关方法前,添加代码让CLR识别到子目录下的DLL:
using System; using System.Runtime.InteropServices; // 初始化GDAL/OGR前执行此代码 [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName); // 指向你的gdal/x64子目录路径 SetDllDirectory(AppDomain.CurrentDomain.BaseDirectory + @"gdal\x64");
注意:发布独立部署包时,要确保该子目录结构被完整包含到发布包中。
3. 用构建事件自动复制文件
在项目属性的生成事件 -> 预生成事件命令行中添加以下命令,实现编译时自动复制ogr_wrap.dll到输出目录:
xcopy /Y "$(SolutionDir)packages\GDAL.Native.3.7.2\runtimes\win-x64\native\gdal\x64\ogr_wrap.dll" "$(TargetDir)"
请根据你的NuGet包实际安装路径调整命令中的版本号和目录结构
4. 检查依赖完整性
用Dependency Walker工具打开ogr_wrap.dll,确认它依赖的其他GDAL原生库(如gdal37.dll等)是否存在且可被搜索到,缺失的依赖也需要放到可访问路径中。
内容的提问来源于stack exchange,提问作者Vedran Mornar
相关产品推荐
相关产品推荐

