簡體   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