12

VS2010データベースプロジェクトでは、ターゲット(またはそうでない)データベースを定義し、アクションを設定し(スクリプトのみを作成するか、スクリプトを作成してターゲットに展開する)、「展開」を実行し(VSまたはMSBuildを介して)、結果スクリプトを取得できます。

結果のスクリプトを使用してインストーラーをビルドし、後でインストールプロセスの一部としてスクリプトを適用するため、「作成して展開」アクションを使用したことはありません。

この機能により、アップグレード(前回のバージョン以降の変更のみ)または完全インストールスクリプト(ターゲットデータベースが指定されていない場合)の両方を作成できました。

一般にVS2012またはSSDTを使用している場合、アップグレードおよびフルインストールでこの「スクリプトのみ」の動作を再現するためのオプションの正しい組み合わせが見つからないようです。

VSでボタンをクリックする方法をカバーするこの質問を見つけましたが、MSBuildでこれを実行する方法については説明していません。

誰かがこの特定の構成に役立つリソースを教えてもらえますか?

4

2 に答える 2

22

数時間ハッキングした後、私は何かを実行可能にすることができました。それは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ファイルを作成します)が、ファイルに正しいコンテンツを作成しているように見えます。

于 2012-10-11T14:20:59.270 に答える
7

あなたは正しい方向に進んでいますが、パラメータがありません。スクリプト名を指定する場合は、msbuildの実行で次のパラメーターを使用する必要があります。

/p:PublishScriptFileName=[your output script.sql]
于 2013-04-09T12:24:20.867 に答える