2010-08-31 73 views
4

我的VS2010數據庫部署在安裝了SQL Server 2008 R2的構建服務器上失敗。下面是與自己相關的輸出:VS2010數據庫項目部署錯誤SQL01268目錄查找失敗

創建Acme.Database ...

d:\ TeamCity的\ BuildAgent \工作\ da2fc5ebd5805d44的\ src \ Acme.Database \ SQL \ Acme.Database.sql(30, 0):錯誤SQL01268:.Net SqlClient數據提供程序:消息5133,級別16,狀態1,行1目錄查找文件「C:\ Program Files \ Microsoft SQL Server ** MSSQL10.MSSQLSERVER ** \ MSSQL \ DATA \ Acme_Database_log.ldf「操作系統錯誤3失敗(系統找不到指定的路徑)。

D:\ TeamCity \ BuildAgent \ Work \ da2fc5ebd5805d44 \ src \ Acme.Database \ sql \ Acme.Database.sql(30,0):錯誤SQL01268:.Net SqlClient數據提供程序:Msg 1802,Level 16,State 1,第1行CREATE DATABASE失敗。列出的某些文件名不能被創建。檢查相關的錯誤。

執行批處理時發生錯誤。

的實際路徑是在這裏:

C:\ Program Files文件\ Microsoft SQL Server的** ** MSSQL10_50.MSSQLSERVER \ MSSQL \ DATA \ Acme_Database.mdf

唯一引用我在數據庫項目中能找到的路徑是在根文件夾中,一個文件叫做:

PRIMARY.Acme_Database.sqlfile.sql

它包含一個ALTER DATABASE語句,我更改爲使用_50路徑,但這並未解決問題。

我不知道爲什麼數據庫項目需要知道在任何情況下實際的數據庫MDF文件的位置 - 我本來以爲它可以連接到TSQL,但無論如何我無法獲得該項目部署此錯誤,並會感謝任何幫助。

+0

我設法讓我的數據庫部署通過開放所產生的.sql文件,並手工更新它的數據庫路徑。我還沒有找到一種方法來正確地自動檢測它所需的路徑。 瑞恩 - 起初我沒有數據庫中的所有服務器上,因此有無處查找其路徑按你的截屏。我創建了一個空數據庫,但失敗的部署將其刪除(然後無法重新添加它)。所以,仍然在爲此付出一點努力,但至少我現在已經部署了一個數據庫(以及未來這樣做的解決方法)。 – ssmith 2010-09-03 12:59:34

+0

我在screencast中引用的路徑來自* server *而不是數據庫。我提到的那些路徑是新數據庫的默認路徑,如果未指定的話。 – 2010-09-03 17:55:39

回答

10

事實證明,如果你指定模式對象的「文件」 \數據庫級對象\存儲\文件(使用添加項目,文件)將覆蓋從服務器查找路徑指定的值。如果您必須指定它們,請使用sqlcmdvariables $(DefaultdataPath)$(Databasename)中的變量來填充內容。

+1

不確定它們在哪裏 - 我有Acme.sqlfile.sql和Acme_log.sqlfile.sql在我dbproj項目的根(出於某種原因),這些曾在他們被重寫是服務器的在說什麼路徑。刪除它們並部署現在可以從構建服務器或從開發機器正常工作。謝謝,你超越了幫助找出這個問題! – ssmith 2010-09-03 19:50:31

1

我對TeamCity一無所知,所以這可能是一個愚蠢的問題,但你如何進行部署?它看起來像的MSBuild部署了DB項目任務可以採取的使數據路徑屬性:

http://www.codewrecks.com/blog/index.php/2009/10/06/deploy-a-database-project-with-tfs-build/

你能設置的路徑呀?

+0

我沒有連接到TeamCity - 我一直在VS2010中打開它,右鍵單擊解決方案資源管理器並選擇「部署」。儘管如此,我會試試MSBuild方法,謝謝! – ssmith 2010-09-02 17:22:33

+0

試過這個,但通過命令行/ msbuild參數設置路徑不起作用,因爲路徑被.sqlfile.sql文件覆蓋(請參閱我對正確答案的評論) – ssmith 2010-09-03 19:51:22

2

查看服務器本身的默認文件路徑。

截屏:http://screencast.com/t/OWM5ODFjZj

有規定有可能成爲問題的路徑的事實。

[更新] 我建議這樣做的原因是,在創建部署腳本期間,如果您尚未在項目設置 - >部署選項卡中指定設置,則從目標服務器的路徑中查找DefaultDataPath。

1

我有同樣的錯誤,但不同的解決方案。 對我來說一切都是正確的(只要我可以告訴),但所產生的部署腳本設置的數據庫名稱變量之前的路徑變量 - 導致到並不存在的變量的引用。我更新了Database.sqlcmdvars以對數據庫名稱值進行硬編碼 - 這不是最佳做法,而是針對我的需求的一種充分的解決方法。

相關問題