2013-12-13 139 views
1

在SSDT項目中有兩個截然不同的目標DeployPublish,與Build並列,但我無法找到它們之間的區別以及應該在什麼時候使用哪個目標?從我可以收集的.dbproj曾用於使用Deploy,但.sqlproj據說用Publish代替它,它仍然存在,它仍然用於什麼?SQL Server數據庫項目的部署和發佈目標

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

主要區別在於,當您有一個用於描述連接信息的發佈配置文件時使用Publish,而當您沒有此文件/不希望使用Deploy時,將使用這個文件。兩者都由SSDT使用,Deploy任務不僅僅是爲了向後兼容。

「發佈」任務接受一個指定保存的發佈配置文件xml文件的「PublishProfile」屬性。從該文件讀取所需的服務器名稱,數據庫名稱和其他所需的屬性。有關更多信息,請參見this forum post

當您沒有發佈配置文件時(例如,如果我正確記得,F5調試部署使用此配置),將使用部署任務。我相信這需要明確設置服務器,數據庫名稱和其他屬性。

+0

謝謝凱文。我是否正確理解Deploy/Publish不會生成增量腳本,我可能需要通過DacServices創建一個自定義的「腳本」任務並將其應用於SMO之類的東西? –

+1

實際上,在運行部署時,默認情況下,默認情況下會創建增量腳本。我相信要生成腳本而不運行部署,請設置「/ p:UpdateDatabase = false」並使用「/p:ScriptName=MyScriptName.sql」指定增量腳本名稱。要確認這些名稱,請查看Microsoft.Data.Tools.Schema.SqlTask​​s.targets文件中的屬性。 –

-1

我假設它是爲了向後兼容。安裝SSDT更新後,將SQL2008 dbproj升級到SQL2012 sqlproj,您可能仍然希望您的dbprojects在轉換之前正常運行。