Ответ 1
После взлома в течение нескольких часов я смог получить что-то работоспособное. Это сводится к двум важным элементам: получение правильного 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>
В предыдущем формате проекта вы можете оставить целевую БД и строку соединения пустым, и она создаст "полное" развертывание script. Однако в файлах sqlproj SSDT вы должны предоставить что-то, даже если оно неверно, следовательно, имя базы данных "BLANK". Если я изменю это на фактическую базу данных, это приведет к дельта script.
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 с тем же именем, что и профиль публикации), но, похоже, создает правильный файл в файле.