Я унаследовал систему, которая требует развертывания dbschema для нескольких баз данных (по одной на клиент), и настроил ночную сборку для развертывания изменений на моем уровне (пример ниже).Примерно в 50% случаев он работает отлично, но в другие 50% я получаю сообщение об ошибке где-то в середине сборки:
"d: \ builds {Project} \ Dev Nightly Database Update \ \BuildType \ TFSBuild.proj "(цель EndToEndIteration) (1) ->" d: \ builds {Project} \ Ночное обновление базы данных Dev \ Sources \ Database \ Database.dbproj "(перестроить; цель развертывания) (3:18) ->(Цель DspDeploy) -> C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ TeamData \ Microsoft.Data.Schema.TSqlTasks.targets (120,5): ошибка MSB4018: задача «SqlDeployTask» неожиданно завершилась неудачей.[d: \ builds {Project} \ Ночное обновление базы данных Dev \ 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 при запуске следующей итерации.Я пытался поставить задачу «Сон» в качестве последнего усилия, но это не помогло вообще.
Любые другие предложения?
<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-->