2013-12-13 2 views
1

Есть две различные цели: Deploy и Publish, в проекте SSDT вместе с Build, но я не могу найти что-либо по поводу того, какая разница между ними и какой из них следует использовать, когда? Из того, что я могу собрать .dbproj использовал Deploy, но .sqlproj предположительно заменил его Publish, почему он все еще там и для чего он еще используется?Задачи развертывания и публикации базы данных SQL Server Database

$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets

<UsingTask TaskName="SqlBuildTask" AssemblyFile="$(SqlServerRedistPath)\Microsoft.Data.Tools.Schema.Tasks.Sql.12.dll" /> 
<UsingTask TaskName="SqlDeployTask" AssemblyFile="$(SqlServerRedistPath)\Microsoft.Data.Tools.Schema.Tasks.Sql.12.dll" /> 
<UsingTask TaskName="SqlPublishTask" AssemblyFile="$(SqlServerRedistPath)\Microsoft.Data.Tools.Schema.Tasks.Sql.12.dll" /> 

<DeployDependsOn> 
    BeforeDeploy; 
    PreDeployEvent; 
    SqlDeploy; 
    PostDeployEvent; 
    AfterDeploy 
</DeployDependsOn> 

<Target Name="Deploy" DependsOnTargets="$(DeployDependsOn)"> 

<PublishDependsOn> 
    BeforePublish; 
    PrePublishEvent; 
    SqlPublish; 
    PostPublishEvent; 
    AfterPublish 
</PublishDependsOn> 

<Target Name="Publish" DependsOnTargets="$(PublishDependsOn)"> 

ответ

3

Главное отличие заключается в том, что публикация используется, когда у вас есть файл профиля публикации, описывающий информацию о соединении, тогда как Deploy используется, когда у вас нет этого файла/вы не хотите его использовать. Оба используются SSDT, задача Deploy не просто для обратной совместимости.

Задача «Опубликовать» принимает свойство «PublishProfile», которое указывает сохраненный xml-файл публикации публикации. Требуемое имя сервера, имя базы данных и другие необходимые свойства читаются из этого файла. См. this forum post для получения дополнительной информации.

Задача развертывания используется, если у вас нет профиля публикации (например, развертывание отладки F5 использует это, если я правильно помню). Я считаю, что это требует, чтобы сервер, имя базы данных и другие свойства были установлены явно.

+0

Спасибо, Кевин. Правильно ли я понимаю, что Deploy/Publish не создает сценарий дельта, и мне может потребоваться создать пользовательскую задачу «Script» с помощью DacServices и применить ее с чем-то вроде SMO? –

+1

На самом деле задачи создают дельта-скрипт по умолчанию при запуске развертывания. Я считаю, что для создания сценария без запуска развертывания установите «/ p: UpdateDatabase = false» и укажите имя сценария дельта, используя «/p:ScriptName=MyScriptName.sql». Для подтверждения этих имен проверьте свойства в файле Microsoft.Data.Tools.Schema.SqlTasks.targets. –

-1

Я предполагаю, что это для обратной совместимости. Обновляя SQL2008 dbproj до SQL2012 sqlproj после установки обновления SSDT, вы, вероятно, все равно хотите, чтобы ваши dbprojects функционировали правильно до тех пор, пока они не будут преобразованы.

Смежные вопросы