繁体   English   中英

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

[英]How to avoid .dacpac project checks in CI?

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM