Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何避免CI中的.dacpac项目检查?_Sql Server_Tfs_Continuous Integration_Sql Server Data Tools_Devenv - Fatal编程技术网

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

Sql server 如何避免CI中的.dacpac项目检查?,sql-server,tfs,continuous-integration,sql-server-data-tools,devenv,Sql Server,Tfs,Continuous Integration,Sql Server Data Tools,Devenv,我使用devenv.exe在CI中构建数据库项目。ConfigurationManager中的所有部署复选框均已禁用。sqlproj文件中的DeployToDatabase设置为False。 我使用devenv.exe就像 devenv.exe "PathToSln\MySln.sln" /build /Release /Out "LogFile.log" 在每个构建中,我都会遇到错误:系统版本的当前表和历史表没有匹配的模式。我知道这个错误意味着什么,我现在应该接受它。因此,问题是:如何通过

我使用devenv.exe在CI中构建数据库项目。ConfigurationManager中的所有部署复选框均已禁用。sqlproj文件中的DeployToDatabase设置为False。 我使用devenv.exe就像

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

在每个构建中,我都会遇到错误:系统版本的当前表和历史表没有匹配的模式。我知道这个错误意味着什么,我现在应该接受它。因此,问题是:如何通过命令行删除devenv.exe中的模式验证

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


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

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

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

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

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

您遇到了一个尚未修复的时态表错误。隐式历史记录表定义可能会发生这种情况。切换到显式定义的历史记录表,或者通过关闭VS并删除自动生成的DBMDL缓存文件(位于sqlproj文件旁边的磁盘上)来解决此问题


您能完全删除模式验证吗?通过用户界面这是可能的吗?我想不是。如果是,那么它可能更像是一个配置文件,而不是一个命令行开关。@paulbarbin,我不知道如何禁用它。这个msdn页面建议禁用扩展验证,但我在VS中没有看到这样的选项。遗憾的是,我需要.dacpac文件,所以我不能跳过项目构建。但是我相信,避免模式验证和部署是可能的,因为我在本地没有遇到同样的错误。谢谢你的想法和时间。不幸的是,我已经隐式地定义了历史表,并且在每次构建中都会再次创建DBMDL。另外,应该有不检查数据库的方法,因为本地机器上的构建是正确的。我建议切换到显式定义的历史表,直到修复SSDT中的错误。微软不会在不检查数据库结构的情况下引入一种构建项目的方法。我已经设置了一个强制删除DBMDL文件的方法,它现在可以工作了@史蒂文:非常感谢你的帮助。