TFSBuild - 数据库部署 - 存在文件锁定冲突

Posted

技术标签:

【中文标题】TFSBuild - 数据库部署 - 存在文件锁定冲突【英文标题】:TFSBuild - Database Deploy - There is a file locking violation 【发布时间】:2011-10-18 17:10:49 【问题描述】:

我继承了一个系统,该系统需要将 dbschema 部署到多个数据库(每个客户端一个)并设置夜间构建以将更改部署到我的开发层(示例如下)。大约 50% 的时间它工作得很好,但另外 50% 我在构建过程中的某个地方遇到错误:

"d:\buildsProject\Dev Nightly Database Update\BuildType\TFSBuild.proj" (EndToEndIteration 目标) (1) -> “d:\buildsProject\Dev Nightly Database Update\Sources\Database\Database.dbproj”(重建;部署目标)(3:18) -> (DspDeploy 目标)-> C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.TSqlTask​​s.targets(120,5):错误 MSB4018:“SqlDeployTask”任务意外失败。 [d:\buildsProject\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:\buildsProject\Dev Nightly Database Update\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-->

【问题讨论】:

您是否同时运行多个构建? 【参考方案1】:

尝试添加 MSBuild 任务参数 RunEachTargetSeparately="True" 或 UnloadProjectsOnCompletion="True"。见http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx

【讨论】:

我会将这些添加到构建中,看看它们本周是否有帮助 不存在文件锁定问题:(

以上是关于TFSBuild - 数据库部署 - 存在文件锁定冲突的主要内容,如果未能解决你的问题,请参考以下文章

通过 TFS Build 部署一个多个数据库项目的问题

TFSBuild/MSBuild 和项目参考与文件参考

如何为每个部署目标指定 Jenkins 部署配置

Heroku 部署在不存在的 yarn.lock 文件上失败

TFSBuild 2013 无法更改 msbuild 版本

取消部署 Tomcat Web 应用程序时如何防止文件锁定?