数時間ハッキングした後、私は何かを実行可能にすることができました。それは2つの重要な要素に帰着します:正しい公開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>
以前のプロジェクト形式では、ターゲットDBと接続文字列を空白のままにすると、「完全な」展開スクリプトが生成されます。ただし、SSDT sqlprojファイルでは、正しくない場合でも何かを指定する必要があるため、「BLANK」データベース名を指定する必要があります。これを実際のデータベースに変更すると、デルタスクリプトが生成されます。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /p:Configuration=Release;Platform=AnyCPU;SqlPublishProfilePath="<fullPathToPublishXML";UpdateDatabase=False /t:Rebuild,Publish "<fullPathToSqlProj>"
これは、公開xmlにあるDeployScriptFileNameを引き続き尊重しません(公開プロファイルと同じ名前のSQLファイルを作成します)が、ファイルに正しいコンテンツを作成しているように見えます。