我已經繼承了一個系統,需要將dbschema部署到多個數據庫(每個客戶端一個),並設置每晚構建以將更改部署到我的開發層(以下示例)。大約50%的時間它的偉大工程,但另外50%我在構建中部某處得到一個錯誤:TFSBuild - 數據庫部署 - 存在文件鎖定衝突
「d:\建立{項目} \開發夜間數據庫更新\ BuildType \ TFSBuild (1) - > 「d:\ builds {Project} \ Dev Nightly Database Update \ Sources \ Database \ Database.dbproj」(Rebuild; Deploy target)(3:18) - > ( DspDeploy target) - > C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ TeamData \ Microsoft.Data.Schema.TSqlTasks.targets(120,5):error MSB4018:「SqlDeployTask」任務意外失敗。 [d:\ builds {Project} \ Dev Nightly Database Update \ Sources \ Database \ Database.dbproj] C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ TeamData \ Microsoft.Data.Schema.TSqlTasks.targets (120,5):錯誤MSB4018:存在文件鎖定衝突。關閉任何使用數據庫文件的外部應用程序。 [d:\ builds {Project} \ Dev每晚數據庫更新\ Sources \ Database \ Database.dbproj]
我環顧四周,但沒有找到任何真正的解決方案。我假設我得到錯誤,因爲msbuild在下一次迭代啓動時仍在使用dbproj文件。我曾嘗試將睡眠任務作爲最後的努力,但這一點都沒有幫助。
其他建議?
<Target Name="Client DB Deploy" Outputs="%(Database.Name)">
<MSBuild Projects="$(SolutionRoot)\Database\Database.dbproj"
Properties="Configuration=Default; OutDir=$(BinariesRoot)\$(Configuration)\;
DeployToDatabase=True;TargetDatabase=%(Database.Name);
TargetConnectionString=Data Source=$(DatabaseServer)%3BIntegrated Security=True;
AlwaysCreateNewDatabase=False;BlockIncrementalDeploymentIfDataLoss=False"
Targets="Rebuild;Deploy" />
<Copy SourceFiles="$(OutDir)..\Database.sql" DestinationFolder="$(OutDir)_SetupPackages\_Database\%(Database.Name)" />
<SleepTask Timeout="10000" /> <!--sleep the build to try and avoid file locks we get in the loop-->
您是否有多個版本同時運行? –
不只是一個生成 –