VS2015中NuGet安装GDAL 1.11未复制gdal运行时文件夹求助
我之前在VS2015里用NuGet装GDAL 1.11的时候也踩过这个坑,给你几个亲测有效的解决办法和替代方案:
解决VS2015中GDAL 1.11 NuGet包未复制gdal文件夹到输出路径的问题
办法一:配置Post-build事件自动复制
这是最直接的临时解决方案,不用修改包本身的配置:
- 右键你的项目 → 属性 → 生成事件 → 后期生成事件命令行
- 输入类似下面的命令,把路径里的版本号替换成你实际安装的GDAL NuGet包版本:
其中xcopy /E /Y "$(SolutionDir)packages\GDAL.1.11.x.x\build\native\gdal" "$(TargetDir)gdal"/E表示复制所有子目录及文件,/Y表示覆盖文件时不弹出提示,$(SolutionDir)和$(TargetDir)是VS的内置宏,会自动适配你的项目路径。 - 点击确定后,每次编译项目时,系统都会自动把gdal文件夹复制到输出目录。
办法二:修改NuGet包的.targets配置文件
如果想让这个包在所有使用它的项目中都自动生效,可以修改它的构建配置文件:
- 找到NuGet包的安装目录,一般是
解决方案根目录\packages\GDAL.1.11.x.x\build\native - 打开
GDAL.targets(或类似命名的配置文件) - 在文件内的
<ItemGroup>节点下添加以下内容,让VS在构建时自动复制整个gdal文件夹:<None Include="$(MSBuildThisFileDirectory)gdal\**\*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> - 保存文件后重新编译项目,VS就会自动把gdal文件夹及所有运行时DLL复制到输出路径了。
办法三:替代方案——直接使用预编译GDAL二进制包
如果NuGet包的问题始终没法解决,也可以绕过NuGet,直接用官方预编译包:
- 下载GDAL 1.11版本的Windows预编译包,选择和你项目架构(x86/x64)匹配的版本
- 解压后把gdal文件夹复制到你的项目目录下,右键该文件夹 → 属性 → 将“复制到输出目录”设置为“始终复制”或“较新时复制”
- 在项目中添加对GDAL相关DLL的引用,或者在代码中通过路径调用,这样编译时就能确保文件被复制到输出路径。
额外提示
- 注意检查项目的架构(Debug/Release、x86/x64),确保NuGet包的版本和项目架构匹配,架构不匹配也可能导致文件复制失败
- 如果是团队协作项目,建议把修改后的.targets文件或手动复制的gdal文件夹提交到版本控制系统,避免其他成员遇到同样的问题
内容的提问来源于stack exchange,提问作者manatttta
相关产品推荐
相关产品推荐

