SqlPackage发布时未部署被引用DAC包,IncludeCompositeObjects参数未生效
问题根因
你配置的数据库项目引用属于外部数据库引用,而非复合项目引用,因此IncludeCompositeObjects参数不会触发独立依赖库的部署:
- 你在
ProjectReference节点中添加了<DatabaseSqlCmdVariable>Dependency</DatabaseSqlCmdVariable>配置,该配置的作用是明确告知DacFX,当前引用指向同一个实例下的另一个独立数据库,所有依赖项目的对象都属于[$(Dependency)]这个独立库。DacFX解析该dacpac仅为了校验主项目中跨库引用的合法性,不会将其视为需要部署的对象,这也是日志显示依赖包已解析,但部署脚本无相关内容的核心原因。
IncludeCompositeObjects参数的实际作用
该参数仅针对复合项目引用生效:
当你的项目引用没有配置DatabaseSqlCmdVariable属性时,依赖项目会被视为主项目的一部分,所有对象会直接合并到主项目的dacpac中。IncludeCompositeObjects开关用于控制发布主库时,是否将这些合并进来的依赖对象也同步部署到目标库(默认值为false,仅部署主项目本身的对象)。这种场景下最终只会生成一个数据库,不存在独立的Dependency库。
解决方案
根据你的实际需求选择对应方案:
方案1:需要保留两个独立数据库
IncludeCompositeObjects不支持该场景,必须单独部署两个dacpac,部署顺序为先发布Dependency.dacpac,再发布Dependent.dacpac,发布主库时正确传入Dependency参数即可。
方案2:不需要独立的Dependency库,所有对象合并到Dependent库
修改项目引用配置:
- 删除
ProjectReference节点中的<DatabaseSqlCmdVariable>Dependency</DatabaseSqlCmdVariable>配置 - 删除对应的
SqlCmdVariable节点配置 - 重新编译解决方案后再次执行发布命令,此时开启
IncludeCompositeObjects=true即可将两个项目的所有对象部署到同一个Dependent数据库中。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

