WPF的坑:NuGet引入源代码包导致编译失败

当目标项目为WPF项目时,使用NuGet导入源代码包出现的问题。

起因

某天,为了更方便管理引用的函数库,使用NuGet包管理器导入『GDAL』库(包含4个dll文件、1个cs文件和1个vb文件)。在程序的主函数中,写入如下代码配置GDAL库,之后就可以正常使用GDAL库。

1
2
GdalConfiguration.ConfigureGdal();
GdalConfiguration.ConfigureOgr();

添加以下命令空间。

1
2
3
using OSGeo.GDAL;
using OSGeo.OGR;
using OSGeo.OSR;

测试GDAL库的代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
// 读取栅格影像,本文使用 SRTM 30M DEM数据
Dataset ds = Gdal.Open("N35E113.hgt", Access.GA_ReadOnly);
if (ds == null)
{
Console.WriteLine("Can't open " + "N35E113.hgt");
System.Environment.Exit(-1);
}
// 输入栅格影像信息
Console.WriteLine("Raster dataset parameters:");
Console.WriteLine(" Projection: " + ds.GetProjectionRef());
Console.WriteLine(" RasterCount: " + ds.RasterCount);
Console.WriteLine(" RasterSize (" + ds.RasterXSize + "," + ds.RasterYSize + ")");

控制台项目

编译生成并运行,可以看到没有任何错误。

2023-02-21_101815.png

WinForm项目

编译生成并运行,可以看到没有任何错误。

2023-02-21_105150.png

WPF项目

编译生成并运行,可以看到生成的项目并不是原始的项目,新的临时项目命名特征可总结为『{项目名}+{随机字符}+wpftmp.csproj』。同时,会出现找不到『GdalConfiguration』的错误。

2023-02-21_105507.png

错误分析

根据吕毅在其博客文章中的分析,可以知道这是WPF项目在编译过程中产生的问题。

解决方案

  1. 继续使用WPF项目的前提下,则放弃使用NuGet包管理器自动导入GDAL库,改为手动导入。
  2. 继续使用NuGet包管理器的前提下,则放弃使用WPF项目,改为使用WinForm项目。