【问题标题】:How to avoid .dacpac project checks in CI?如何避免 CI 中的 .dacpac 项目检查?
【发布时间】:2017-05-28 22:59:59
【问题描述】:

我使用 devenv.exe 在 CI 中构建我的数据库项目。 ConfigurationManager 中的所有“部署”复选框都被禁用。 sqlproj 文件中的 DeployToDatabase 设置为 False。 我使用 devenv.exe 之类的

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

在每次构建时我都会收到错误消息:“系统版本化的当前和历史表没有匹配的架构。”我知道这个错误意味着什么,我现在应该忍受它。所以,问题是:如何通过命令行删除 devenv.exe 中的架构验证?

【问题讨论】:

  • 你能完全删除模式验证吗?是否可以通过 UI(我认为不是)。如果是,那么它可能更像是一个配置文件而不是命令行开关。
  • @paulbarbin,我不知道如何禁用它。这个msdn.microsoft.com/en-us/library/… msdn 页面建议禁用扩展验证,但我在 VS 中没有看到这样的选项。

标签: sql-server tfs continuous-integration sql-server-data-tools devenv


【解决方案1】:

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

所有这些都意味着您需要使用临时表修复错误。我能想到这里可能会发生三件事:

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

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

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

【讨论】:

  • 非常感谢您的想法和时间。不幸的是,我已经隐式定义了历史表,并且在每次构建时都会再次创建 DBMDL。另外,应该有不检查数据库的方法,因为本地机器上的构建是正确的。
  • 我建议切换到明确定义的历史表,直到 SSDT 中的错误得到修复。微软不会在不检查数据库结构的情况下引入构建项目的方法。
  • 我设置了强制删除 DBMDL 文件,现在可以使用了。 @Steven 非常感谢您的帮助。
【解决方案2】:

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

如果您之前没有创建自定义构建定义,您可以在选择调试或发布的下拉菜单中选择“配置管理器”,然后您可以从那里关闭构建或数据库项目(取消选中相应的构建列)或通过从活动解决方案配置下拉列表中选择“”来创建自定义构建。然后创建一个新的并配置相应的构建和跳过的内容。

【讨论】:

  • 很遗憾,但我需要 .dacpac 文件,所以我不能跳过项目构建。但我确信可以避免 Schema Validation and Deploy - 只是因为我在本地没有遇到同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2011-10-04
  • 2016-12-01
相关资源
最近更新 更多