使用C#/ .NET中的GDAL时出现"No Disk"错误

Blu*_*que 14 .net c# windows gis gdal

我正在使用Tamas Szekeres构建的GDAL,包括使用C#和.net 4.0的桌面GIS应用程序中的C#绑定

我将整个GDAL发行版包含在我的可执行文件的子目录中,具有以下文件夹结构:

\Plugins\GDAL
\Plugins\GDAL\gdal
\Plugins\GDAL\gdal-data
\Plugins\GDAL\proj
Run Code Online (Sandbox Code Playgroud)

我们正在使用EPSG:4326,并且该软件是使用32位目标构建的,因为GDAL C#API正在使用p/invoke到32位库(可以尝试64位,因为Tamas提供这些,没有得到它然而).

当我运行我的应用程序时,我收到以下错误

在此输入图像描述

当软件尝试访问不再连接的设备(例如可移动驱动器)时,通常会发生此错误.无法"捕获"此异常,因为它会弹出一个系统对话框.

在使用任何按钮解除对话框后,软件继续按设计执行.

第一次调用以下方法时会发生错误

OSGeo.OSR.CoordinateTransformation.TransformPoint(double[] inout);
Run Code Online (Sandbox Code Playgroud)

奇怪的东西:

  • 错误发生在一台计算机上(目前为止)
  • 我已经在其他几台32位和64位计算机上运行该软件而没有任何问题
  • 编译我正在使用的GDAL填充程序库后第一次运行时错误不会出现,它只会在每次后续运行时发生
  • 无论发布版本还是调试版本,它都会发生
  • 无论调试器是否附加,都会发生这种情况
  • 无论我打开还是关闭Gdal.UseExceptions或Osr.UseExceptions(),它都会发生;
  • 禁用可移动驱动器会导致错误消失.这不是我认为真正的解决方案,因为我无法要求客户这样做.

我尝试过以下方法:

  • 抓住错误
  • 更改GDAL目录和环境设置
  • 改变计算机和操作系统:这很有效
  • 使用SysInternals ProcMon跟踪正在打开的文件没有运气,它们似乎都是存在的文件
  • 当硬盘驱动器发生故障时,我重新构建了有问题的计算机,但无济于事.
  • 使用CCleaner "清理"注册表
  • GDAL目录中的文件在执行时保持不变

假设

  • 在非托管代码中发生错误
  • 在GDAL初始化期间,某些路径指的是计算机上不再连接的驱动器.
  • 我也在假设这仅限于计算机配置错误

组态

  • Windows 7专业版
  • 英特尔酷睿i7 920 @ 2,67GHz
  • 12.0 GB RAM
  • 64位操作系统
  • 驱动器C:120 GB SSD,带OS,开发(Visual Studio 10)等
  • 驱动器D:1 TB WD 10,000k带有数据,无法访问数据.

问题

我要么需要一个方向来捕获错误,要么是一个工具或技术,可以让我找出导致它的原因.我不想发布软件,因为某些系统可能会出现这种情况.

Ada*_*dam 2

我对这个图书馆没有任何经验,但也许一些新的眼光可能会给你带来灵感......

首先,问题写得好!显然这个问题确实难倒了你......

关于重建后未发生错误的注释令人尖叫:该库运行后是否在其二进制目录中生成某种状态文件?如果是这样,它可能将不正确的路径信息保存到该“配置”文件中,以误导性地尝试加速其下一次启动。

也许扫描此目录以查找“全新构建”和“首次运行”之间的更改?

至少您可能会找到一个可以在关机时清理的文件以避免出现此警报...

华泰