SQL Server数据库项目部署和;发布目标

时间:2013-12-13 12:55:00

标签: sql-server msbuild sql-server-data-tools

Deploy一起在SSDT项目中有两个不同的目标PublishBuild,但我找不到任何关于它们之间的区别以及应该使用哪个目标的内容。 ?从我收集的内容.dbproj过去常常使用Deploy,但.sqlproj据说用Publish替换它,为什么它仍然在那里以及它仍用于什么?

$(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)">

2 个答案:

答案 0 :(得分:3)

主要区别在于,当您拥有描述连接信息的发布配置文件时使用Publish,而当您没有此文件/不希望使用Deploy时使用Deploy。两者都由SSDT使用,部署任务不仅仅是为了向后兼容。

“发布”任务接受“PublishProfile”属性,该属性指定已保存的发布配置文件xml文件。从该文件中读取所需的服务器名称,数据库名称和所需的其他属性。有关更多信息,请参阅this forum post

当您没有发布配置文件时,将使用部署任务(例如,如果我没记错的话,F5调试部署会使用此部署)。我认为这需要明确设置服务器,数据库名称和其他属性。

答案 1 :(得分:-1)

我认为这是为了向后兼容。在安装SSDT更新后将SQL2008 dbproj升级到SQL2012 sqlproj,您可能仍希望dbproject在转换之前正常运行。