当 sqlproj.user 文件不在源代码管理中时,DACPAC build/deploy 期间发生了什么?

What is happening during DACPAC build/deploy when the sqlproj.user file is not in source control?

我是不是遗漏了什么,还是 MS 弄错了:

问题 1: 我应该只将 projname.sqlproj.user 文件添加到源代码管理吗?
问题 2: 我是否应该以某种方式将 .publish.xml 文件合并到构建步骤中?
额外问题:如果没有包含所有这些关键标志的 .sqlproj.user 文件,构建服务器上会发生什么?

背景:
在我的大型企业中,我的团队首先使用 CI/CD 管道使用构建服务器生成的 .dacpac 将 .sqlproj 交付到 sql 数据库。它正在工作,我正在学习 dacpac 绳索。

我正在玩我的团队和灾难之间的旗帜(即 DropObjectsNotInSource=false),git 没有看到变化在 .sqlproj 文件中。很明显,这些标志存储在 .user 文件中,而不是 .sqlproj 文件中!? (projname.sqlproj.user)

通常的做法是.git忽略*.user 文件,MS 知道这一点,所以我疯了吗?我不希望新开发者开始玩旗帜而永远看不到 SC 中的变化。

其他背景
我们的目标之一是通过 ci/cd 管道处理所有发布事件;所以我们真的不想要一个开放的路径来 manually/directly 甚至对 Dev env 发布更改。太多的长期开发人员都有完全跳过 Dev env 并直接进入 QA 然后 Prod 的极其糟糕的习惯。因此,我们可能需要通过在 QA/Prod 中绝对拒绝个人 Alter/Control 访问来让他们震惊,但甚至可能在开发环境中。

堆栈:
VS2017(2019为选项)
SSDT
GitHubEnterprise
团队城市
章鱼
SQLServer2016

这是一个“publish.xml”或发布 parameters/profile 设置。当我们支付 sqlpackage.exe 时,我们会包含具有这些设置的适当发布配置文件的选项。您也可以在命令行级别进行设置。绝对不是*.user文件设置。

也就是说,我通常还会在项目中包含这些发布配置文件供开发人员使用(本地、开发等),这样他们就可以双击其中一个并使用 local/dev 构建预定义的设置。 (通常带有警告,例如 - 在通过生成脚本点击“发布”之前查看预览)然后我们可以将这些发布配置文件包含在我们的 deploy/publish 操作中。

如果你走那条路,唯一的警告是,如果你使用“发布”文件夹,你可能需要调整你的 .gitignore。如果您使用的是 gitignore 存储库文件,Visual Studio 项目默认会忽略该文件夹名称。

Q1 - 不,你不应该。开发人员可以在他们的机器上有非常不同的设置和首选项,并且将此文件添加到源代码管理将是一团糟。这个文件应该被git忽略(如果你使用git)。你可以看看我的仓库,我在那里开始创建类似 SSDT template 的东西。它也有 .gitignore 模板。

Q2 - *.publish.xml 用于发布的配置文件。您可以为不同的环境设置不同的设置。 DropObjectsNotInSource=false 设置应该驻留在该配置文件中,因为您可能希望将这些对象放在开发环境中,而不是放在生产环境中。但是,如果没有特定目的,我会将此设置设置为所有环境都为 false。

红利问题 - 如前所述,*.user 文件不应参与部署。