Em um sql server 2012 sqlproj (projeto de banco de dados SSDT) você usa perfis de publicação. Você pode começar clicando com o botão direito do mouse em seu projeto de banco de dados e escolhendo 'Publicar'.
Você pode então definir as opções desejadas e salvá-las em um chamado perfil de publicação em seu projeto. Clicar duas vezes neste perfil inicia o assistente de publicação com as opções corretas definidas.
Em seu perfil de publicação, você pode incluir valores codificados para variáveis sqlcmd:
<ItemGroup>
<SqlCmdVariable Include="ProjectDirectory">
<Value>UNKNOWN</Value>
</SqlCmdVariable>
</ItemGroup>
Se desejar, você pode atualizá-los com valores dinâmicos durante a compilação. No seu projeto msbuild:
<Target Name="SetProjectDirectoryInPublishXml">
<ItemGroup>
<Namespaces Include="nsMsbuild">
<Prefix>nsMsbuild</Prefix>
<Uri>http://schemas.microsoft.com/developer/msbuild/2003</Uri>
</Namespaces>
</ItemGroup>
<ItemGroup>
<SSDTPublishFiles Include="$(SolutionBinFolder)\**\*.publish.xml" />
</ItemGroup>
<MSBuild.ExtensionPack.Xml.XmlFile Condition="%(SSDTPublishFiles.Identity) != ''"
TaskAction="UpdateElement"
File="%(SSDTPublishFiles.Identity)"
Namespaces="@(Namespaces)"
XPath="//nsMsbuild:SqlCmdVariable[@Include='ProjectDirectory']/nsMsbuild:Value"
InnerText="$(MSBuildProjectDirectory)"/>
</Target>
Isso requer uma extensão para atualizar o XML. Eu uso o pacote de extensão msbuild.
Os créditos para este mecanismo vão para Jamie Thomson