迁移.NET Framework4.8控制台应用至PackageReference遇SqlServerTypes报错
解决从package.config迁移到PackageReference后SqlServerTypes上下文不存在的问题
针对你的.NET Framework 4.8控制台项目迁移后遇到的SqlServerTypes上下文不存在的问题,按以下步骤排查修复:
检查项目文件中的包引用配置
打开你的.csproj文件,确保Microsoft.SqlServerTypes的PackageReference包含完整的资产引用配置——这个包依赖原生运行时文件,缺少相关配置会导致无法加载对应类型:<PackageReference Include="Microsoft.SqlServer.Types"> <Version>你的实际版本号</Version> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference>手动导入包的构建目标文件
迁移后可能丢失了包自带的构建目标引用,需要在.csproj中添加以下内容(替换X.X.X.X为你使用的包版本):<Import Project="$(NuGetPackageRoot)\microsoft.sqlserver.types\X.X.X.X\build\Microsoft.SqlServer.Types.targets" Condition="Exists('$(NuGetPackageRoot)\microsoft.sqlserver.types\X.X.X.X\build\Microsoft.SqlServer.Types.targets')" />这个目标文件负责将原生SqlServer空间库文件复制到输出目录,是类型能被识别的关键。
确认代码中的命名空间引用
在使用SqlServerTypes相关类型的代码文件顶部,确保添加了命名空间引用:using Microsoft.SqlServer.Types;验证输出目录的原生文件
编译项目后,检查输出文件夹(比如bin\Debug\net48)下是否存在x86和x64子文件夹,且里面包含SqlServerSpatial140.dll等文件。如果没有,重新安装一次NuGet包,或手动确认包的资产是否被正确包含。修复绑定重定向
打开App.config,确保存在对应版本的绑定重定向配置,避免版本冲突:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="你的实际版本号" /> </dependentAssembly> </assemblyBinding> </runtime>
完成以上步骤后,清理并重新编译项目,SqlServerTypes相关类型应该能被正常识别。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

