Comment créer les scripts de déploiement à partir des projets de base de données VS 2012?

avec les projets de base de données VS2010, je pourrais définir une base de données cible (ou non), définir une action (Créer un script seulement ou créer un script et déployer vers la cible), exécuter un "déployer" (par VS ou MSBuild) et obtenir un script de résultat.

Je n'ai jamais utilisé l'action "create and deploy", parce que j'utilise seulement le script résultant pour construire un installateur et j'appliquerai le script plus tard dans le cadre du processus d'installation.

cette fonctionnalité m'a permis de créer à la fois une mise à niveau (seulement les modifications depuis la dernière version) ou un script d'installation complet (si pointé vers aucune db cible).

Je ne peux pas trouver la bonne combinaison d'options pour reproduire ce comportement" script seulement " pour les mises à jour et les installations complètes en utilisant VS 2012 ou SSDT en général.

j'ai trouvé question qui couvre la façon de cliquer sur les boutons dans VS, mais elle n'aborde pas la façon de faire ceci dans MSBuild.

quelqu'un Peut-il m'indiquer un ressource utile pour cette configuration spécifique?

12
demandé sur Community 2012-10-11 00:39:22

2 réponses

après avoir piraté pendant plusieurs heures, j'ai pu obtenir quelque chose de réalisable. Il se résume à deux éléments significatifs: obtenir une publication xml correcte, et les arguments corrects pour MSBuild.

le fichier publish xml est le format standard qui a été créé avec VS. On dirait quelque chose comme ça...

<?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>

avec le format de projet précédent, vous pourriez laisser la base de données cible et la chaîne de connexion en blanc et cela générerait un script de déploiement "complet". Toutefois, dans SSDT sqlproj fichiers, vous devez fournir quelque chose, même si son incorrect, d'où le nom de base de données "blanc". Si je change ça en base de données, ça produira un script delta.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe /p:Configuration=Release;Platform=AnyCPU;SqlPublishProfilePath="<fullPathToPublishXML";UpdateDatabase=False /t:Rebuild,Publish "<fullPathToSqlProj>"

ceci n'honore toujours pas le nom Depleascriptfilename qui est dans le XML publish (il crée un fichier sql avec le même nom que le profil publish), mais semble créer le bon contenu dans le fichier.

22
répondu StingyJack 2012-10-11 14:20:59

Vous êtes sur la bonne voie, mais il vous manque un paramètre. Si vous souhaitez fournir le nom du script, vous devez utiliser le paramètre suivant dans votre msbuild exécution:

/p:PublishScriptFileName=[your output script.sql]
7
répondu Erlis Vidal 2013-04-09 12:24:20