TFSBuild — развертывание базы данных — нарушение блокировки файла

Я унаследовал систему, которая требует развертывания схемы dbschema в нескольких базах данных (по одной на клиент), и настроил ночную сборку для развертывания изменений на моем уровне разработки (пример ниже). Примерно в 50% случаев он работает отлично, но в остальных 50% я получаю ошибку где-то в середине сборки:

"d:\builds{Project}\Dev Nightly Database Update\BuildType\TFSBuild.proj" (цель EndToEndIteration) (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): ошибка 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 Nightly Database Update\Sources\Database\Database.dbproj]

Я огляделся, но не нашел реальных решений. Я предполагаю, что получаю сообщение об ошибке, потому что msbuild все еще использует файл dbproj при запуске следующей итерации. Я пытался поставить задачу Sleep в качестве последней попытки, но это совсем не помогло.

Любые другие предложения?

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


person Christian Schnepf    schedule 18.10.2011    source источник
comment
У вас одновременно запущено несколько сборок?   -  person Dylan Smith    schedule 18.10.2011


Ответы (1)


Попробуйте добавить параметры задачи MSBuild RunEachTargetSeparately="True" или UnloadProjectsOnCompletion="True". См. http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx

person Ludwo    schedule 19.10.2011
comment
Я добавлю их в сборку и посмотрю, помогут ли они на этой неделе. - person Christian Schnepf; 24.10.2011
comment
Нет, все еще есть проблема с блокировкой файлов :( - person Christian Schnepf; 26.10.2011