安装.NET 9后使用NetTopologySuite遇类型转换异常求助
解决NetTopologySuite在.NET9环境下的类型映射错误
问题根源
你遇到的错误是因为public.geometry是PostGIS提供的空间几何类型,并非PostgreSQL的普通复合类型,而MapComposite<Geometry>是用于映射自定义复合类型的方法,完全不适用这里。另外,安装.NET9后,环境中的Npgsql版本可能自动适配了.NET9,导致和你的.NET8应用出现兼容性冲突。
解决方案
1. 替换错误的映射代码
删除builder.MapComposite<Geometry>("public.geometry");,改用PostGIS专用的映射方法:
var builder = new NpgsqlDataSourceBuilder(connectionString); builder.UseNetTopologySuite(); // 启用PostGIS几何类型映射 var dataSource = builder.Build();
2. 锁定兼容的NuGet包版本
确保项目引用的Npgsql和NetTopologySuite.Npgsql版本适配.NET8:
- Npgsql:使用8.x系列版本(如8.0.3)
- NetTopologySuite.Npgsql:使用与Npgsql版本匹配的版本(如8.0.3)
可以在项目文件中明确指定版本:
<PackageReference Include="Npgsql" Version="8.0.3" /> <PackageReference Include="NetTopologySuite.Npgsql" Version="8.0.3" />
3. 强制使用.NET8运行时
如果系统中同时安装了.NET9,在项目文件中明确指定目标框架和运行时版本,避免应用意外使用.NET9:
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <RuntimeFrameworkVersion>8.0.10</RuntimeFrameworkVersion> <!-- 替换为你使用的.NET8具体版本 --> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Alexander Kolomiets
相关产品推荐
相关产品推荐

