Dans un sql server 2012 sqlproj (projet de base de données SSDT), vous utilisez des profils de publication. Vous pouvez commencer par cliquer avec le bouton droit sur votre projet de base de données et choisir "Publier".
Vous pouvez ensuite définir les options souhaitées et les enregistrer dans un soi-disant profil de publication dans votre projet. Double-cliquer sur ce profil lance l'assistant de publication avec le bon ensemble d'options.
Dans votre profil de publication, vous pouvez inclure des valeurs codées en dur pour les variables sqlcmd :
<ItemGroup>
<SqlCmdVariable Include="ProjectDirectory">
<Value>UNKNOWN</Value>
</SqlCmdVariable>
</ItemGroup>
Si vous le souhaitez, vous pouvez les mettre à jour avec des valeurs dynamiques lors de la construction. Dans votre projet 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>
Cela nécessite une extension pour mettre à jour le XML. J'utilise le pack d'extension msbuild.
Les crédits pour ce mécanisme vont à Jamie Thomson