2012-10-10 4 views
12

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

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

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

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

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

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

ответ

22

После взлома в течение нескольких часов я смог получить что-то работоспособное. Это сводится к двум значимым элементам: получение правильного 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> 

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

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 файл с таким же именем, как опубликовать профиль), но, по всей видимости создать правильное содержимое в файле.

+0

Любые предложения по улучшению вышеуказанного ответа приветствуются. Я думал, что должен хотя бы ответить на этот вопрос, если кто-нибудь сможет его использовать. – StingyJack

+0

Спасибо @StingyJack! Вы избавили меня от разочарования, пытаясь найти способ создания ПОЛНОГО сценария развертывания для установки моего проекта Prod DB. Я заметил, что если вы дадите 'TargetDatabaseName' как' BLANK', скрипт будет генерировать материал для создания БД с именем 'BLANK'. Возможно, вы захотите упомянуть, что нужно удалить или изменить эту часть после создания FULL-скрипта. Кроме того, я заметил, что у меня нет действительного сервера в «Data Source = SERVER» выше. Сценарий генерируется в папке \ bin, но просматривает бомбы. Сценарий также является инкрементным. – Shiva

+0

DeployScriptFileName не работает, но имеет значение PublishScriptFileName. – bielawski

7

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

/p:PublishScriptFileName=[your output script.sql] 
Смежные вопросы