如何避免在 CI 中检查 .dacpac 项目?

How to avoid .dacpac project checks in CI?

我使用 devenv.exe 在 CI 中构建我的数据库项目。 ConfigurationManager 中的所有 "Deploy" 复选框都被禁用。 sqlproj 文件中的 DeployToDatabase 设置为 False。 我用devenv.exe喜欢

devenv.exe "PathToSln\MySln.sln" /build /Release /Out "LogFile.log" 

并且在每次构建时我都会收到错误消息:"System-versioned current and history tables do not have matching schemas." 我知道这个错误的含义,我现在应该忍受它。所以,问题是:如何通过命令行删除 devenv.exe 中的架构验证?

自定义构建定义应该可以解决这个问题。您可以创建一个名为 CI_Build 的构建定义,而不是为 /Release 构建,只让它构建您的代码项目并跳过您的数据库项目。

如果您之前没有创建自定义构建定义,您可以在 select 调试或发布的下拉列表中 select "Configuration Manager" 然后您可以从那里关闭构建或您的数据库项目(Un-check 相应的构建列)或通过 selecting "" 从活动解决方案配置下拉列表中创建自定义构建。然后创建一个新的并相应地配置构建的内容和跳过的内容。

数据库项目总是在生成 dacpac 文件之前验证架构。别无选择。此外,模式验证与部署无关——它正在检查项目定义的数据库是否在内部一致。

所有这些都是说您需要修复时间 table 的错误。我能想到这里可能发生的三件事:

  • 机器上安装的 SSDT 版本旧,并且有一个错误导致大多数临时 table 定义发生此错误。确保您的计算机具有最新版本的 SSDT。

  • 您的项目确实包含无效的临时 table 定义。如果您在项目中同时定义当前和历史 table,但两个 table 具有不同的结构,则会发生这种情况。验证您的 table 模式是否匹配或您的历史记录 table 是否已隐式定义(即指定了历史记录 table 名称,但历史记录 table 本身未在项目有自己的 create table 语句)。

  • 您遇到了一个尚未修复的时间 tables 错误。这可能发生在隐式历史 table 定义中。要么切换到显式定义的历史记录 tables,要么通过关闭 VS 并删除磁盘上 sqlproj 文件旁边自动生成的 DBMDL 缓存文件来解决此问题。