Подтвердить что ты не робот

Как создать сценарии развертывания из проектов баз данных VS 2012?

С проектами базы данных VS2010 я мог бы определить целевую (или нет) базу данных, установить действие (создать script или создать script и развернуть до цели), выполнить "развернуть" (через VS или MSBuild) и получить результат script.

Я никогда не использовал действие "создать и развернуть", потому что я использую результирующий script для сборки установщика и позже применяю script как часть процесса установки.

Эта функция позволила мне создать как обновление (только изменения с последней версии), либо полную установку script (если не указана ни одна из целей db).

Я не могу найти правильную комбинацию опций для воспроизведения этого поведения script только для обновлений и полной установки при использовании VS 2012 или SSDT в целом.

Я нашел этот вопрос, который описывает, как нажимать кнопки в VS, но не рассматривает, как это сделать в MSBuild.

Может ли кто-нибудь указать мне полезный ресурс для этой конкретной конфигурации?

4b9b3361

Ответ 1

После взлома в течение нескольких часов я смог получить что-то работоспособное. Это сводится к двум важным элементам: получение правильного XML-публикации и правильные аргументы для MSBuild.

XML файл публикации является стандартным форматом, созданным с помощью VS. Это похоже на что-то такое...

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludeCompositeObjects>True</IncludeCompositeObjects>
    <TargetDatabaseName>BLANK</TargetDatabaseName>
    <DeployScriptFileName>DeployTarget.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=SERVER;Integrated Security=True;Pooling=False</TargetConnectionString>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <ScriptDatabaseOptions>False</ScriptDatabaseOptions>
    <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
    <CommentOutSetVarDeclarations>False</CommentOutSetVarDeclarations>
  </PropertyGroup>
</Project>

В предыдущем формате проекта вы можете оставить целевую БД и строку соединения пустым, и она создаст "полное" развертывание script. Однако в файлах sqlproj SSDT вы должны предоставить что-то, даже если оно неверно, следовательно, имя базы данных "BLANK". Если я изменю это на фактическую базу данных, это приведет к дельта script.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /p:Configuration=Release;Platform=AnyCPU;SqlPublishProfilePath="<fullPathToPublishXML";UpdateDatabase=False /t:Rebuild,Publish "<fullPathToSqlProj>"

Это все еще не соблюдает имя DeployScriptFileName, которое находится в XML-публикации (он создает файл sql с тем же именем, что и профиль публикации), но, похоже, создает правильный файл в файле.

Ответ 2

Вы на правильном пути, но вам не хватает параметра. Если вы хотите указать имя script, вы должны использовать следующий параметр в вашем исполнении msbuild:

/p:PublishScriptFileName=[your output script.sql]