如何避免在 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 缓存文件来解决此问题。
我使用 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 缓存文件来解决此问题。