2011-10-18 60 views
1

我已經繼承了一個系統,需要將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.TSqlTask​​s.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.TSqlTask​​s.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--> 

+0

您是否有多個版本同時運行? –

+0

不只是一個生成 –

回答

0

嘗試添加MSBuild任務參數RunEachTargetSeparately = 「true」 或UnloadProjectsOnCompletion = 「真」。請參閱http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx

+0

我會將這些添加到生成,看看他們本週是否有幫助 –

+0

不,還有一個文件鎖定問題:( –