是否可以从 DacPackage 以编程方式获取引用的数据库?

Is it possible to get referenced databases programatically from DacPackage?

我有一个引用其他几个数据库的 SSDT 数据库项目。

我现在使用带有 Microsoft.SqlServer.Dac.DacServices.Deploy() 的 Dac API (DacPackage),因为我已经设置

options.IncludeCompositeObjects = true;

我想做的是能够查询内存中的包以从 dacpac 获取引用数据库的列表,然后验证我的运行时配置没有遗漏任何内容。

我在 DacPackage 中找不到允许我执行此操作的属性或方法。

有办法吗?

开箱即用,编号

我已经针对它提出了一个连接项,希望它能在未来的版本中。

我有一个 github 如何操作的示例:

https://github.com/GoEddie/Dacpac-References

基本上你有一个 .dacpac,它是一个 zip 文件 - 在这个里面你有 model.xml,它有一组 CustomData 元素,其中每个元素都是对另一个 dacpac 的引用。

样本 returns 这些 CustomData 元素作为 类 你可以查询 (HeaderParser::GetCustomData) 你也可以使用 HeaderParser::DeleteCustomData 和 HeaderParser::AddCustomData 添加一个。

如果您不喜欢该示例,则可以查询和更新 xml 本身以帮助阅读 zip 文件,使用 "System.IO.Packaging.Package" 或查看示例中的 DacHackXml。