从主数据库中提取 DACPAC

Extracting a DACPAC from the master Database

我正在努力将现有的 Azure V12 数据库引入 SSDT 项目,以便我们可以开始使用源代码管理和 CI 管道。

我遇到的问题是在某些代码中引用了 "sys.fn_get_audit_file",它给出了 "unresolved reference" 错误。我不希望在构建项目时忽略任何错误,因此一直在尝试正确解决此问题。添加对 master 的数据库引用并不能解决问题,似乎 SSDT 附带的 master.dacpac 文件中没有该 sys 函数的定义(在 model.xml 中)。我检查了 VS 文件夹中可用的 master.dacpac 文件的所有版本,甚至尝试了 VS 2019 预览版,看看是否会有更新版本的 master.dacpac。

在网上搜索后,我发现其他人也遇到过 master.dacpac 中缺少对象的类似问题,建议的解决方案是编辑 model.xml,重新打包并更正校验和。我不想走那条路,所以我尝试使用 SqlPackage 从 Azure 的主数据库中提取 DACPAC,但提取的模型中几乎没有对象定义。

有什么建议吗?

有人应该向微软的团队提出这个问题 - 我知道他们在这里监视所以也许有人可以提供帮助??

与此同时,天蓝色似乎支持 fn_get_audit_file,无论如何根据文档。

我已经创建了几个 dacpac 欢迎使用,还有旧的 azure 版本:

https://the.agilesql.club/assets/dacpacs/azure/master.dacpac

和 v12 版本:

https://the.agilesql.club/assets/dacpacs/azurev12/master.dacpac

我所做的是从我的机器(与 2017 相比)中取出现有的 azure master dacpac,并从非 azure 版本中添加 sys.fn_get_audit_sql 元素。

为此,我使用 7zip 提取 model.xml,然后编辑 xml 文件并将 model.xml 文件复制回 dacpac。

这确实会导致模型的校验和错误,所以我有一个小应用程序可以用正确的校验和重写 origin.xml,如果有人,我会把这个应用程序放在 github 上想要它,但它是这个的一个版本:

https://github.com/GoEddie/Dacpac-References/tree/master/src/GOEddie.Dacpac.References

https://github.com/GoEddie/Dacpac-References/blob/master/src/GOEddie.Dacpac.References/ModelChecksumWriter.cs

当我有 master.dacpac 时,我将它们复制回 VS 2017:

C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12 C:\Program Files (x86)\Microsoft Visual Studio17\Commnuity\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12 C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12

(取决于版本)

这让我可以在 azure / azurev12 项目中使用 fn_get_audit_sql:

希望对您有所帮助!

编辑