You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SqlPackage执行报错‘对象引用未设置’的解决方案咨询

问题与解决方案

问题详情

执行SqlPackage生成Azure SQL Database发布脚本时触发空引用异常,命令及错误信息如下:

执行命令

C:\source>sqlpackage /Action:Script  /SourceFile:".\src\Databases\Demo.Build\publish\Demo.Build.dacpac"  /OutputPath:".\test.sql"  /TargetServerName:demo.database.windows.net    
/TargetDatabaseName:DemoDB  /TargetUser:demo  /TargetPassword:demo /p:IncludeCompositeObjects=true   /p:DoNotAlterChangeDataCaptureObjects=False  /p:IgnoreIndexOptions=True  
/p:IgnoreWithNocheckOnForeignKeys=True  /p:IgnorePermissions=True  /p:IgnoreRoleMembership=True  /p:BlockOnPossibleDataLoss=False   /p:BlockWhenDriftDetected=False  
/p:GenerateSmartDefaults=True  /p:DropIndexesNotInSource=False  /p:DropObjectsNotInSource=False  /p:ScriptDatabaseOptions=False  /p:DropStatisticsNotInSource=False  
/p:DoNotAlterReplicatedObjects=False  /p:IgnoreNotForReplication=True /p:AllowIncompatiblePlatform=True

错误输出

Generating publish script for database 'DemoDB' on server 'demo.database.windows.net'.
*** A project which specifies SQL Server 2019 as the target platform may experience compatibility issues with Microsoft Azure SQL Database v12.
Time elapsed 0:00:27.16
*** An unexpected failure occurred: Object reference not set to an instance of an object.

环境信息

  • SqlPackage Version: 161.8089.0
  • .NET Core: 7.0.203

此前构建dacpac时曾出现SQL71502警告(未解析[dbo].[sp_executesql]引用),已通过在.csproj中添加<PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="150.0.0" DacpacName="master" />修复构建警告,但SqlPackage执行仍报错。


修复/规避方案

1. 对齐项目与目标数据库的平台版本

项目当前目标平台为SQL Server 2019,与Azure SQL Database v12存在兼容性提示,这可能是触发空引用的核心诱因:

  • 在项目的.csproj文件中修改目标平台配置:
    <TargetPlatformVersion>Azure SQL Database</TargetPlatformVersion>
    
  • 重新构建生成dacpac文件后,再次执行SqlPackage脚本生成命令。

2. 升级SqlPackage到最新稳定版

当前使用的SqlPackage 161.8089.0存在已知的空引用异常bug,升级到最新版本可解决此类问题:

  • 执行以下命令升级全局安装的SqlPackage:
    dotnet tool update -g microsoft.sqlpackage
    

3. 排查并调整冲突参数

部分参数组合可能触发内部逻辑错误,尝试逐步简化命令:

  • 暂时移除/p:AllowIncompatiblePlatform=True参数,先确保平台兼容性;
  • 若项目无复合对象依赖,去掉/p:IncludeCompositeObjects=true,降低脚本生成的复杂度。

4. 验证dacpac完整性

虽然构建警告已修复,但dacpac可能存在隐性问题,先执行兼容性验证:

  • 使用Validate动作检查dacpac与目标数据库的兼容性:
    sqlpackage /Action:Validate /SourceFile:".\src\Databases\Demo.Build\publish\Demo.Build.dacpac" /TargetServerName:demo.database.windows.net /TargetDatabaseName:DemoDB /TargetUser:demo /TargetPassword:demo
    
  • 根据验证结果修复具体问题后,再生成发布脚本。

5. 替换适配Azure的数据库引用包

当前使用的Microsoft.SqlServer.Dacpacs 150.0.0版本是针对SQL Server的,替换为Azure SQL Database适配版本:

  • 修改.csproj中的包引用:
    <PackageReference Include="Microsoft.SqlServer.Dacpacs" Version="160.0.0" DacpacName="AzureSQLDB" />
    
  • 重新构建dacpac后执行脚本生成命令。

内容的提问来源于stack exchange,提问作者Sol Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:37:05