8

データベースプロジェクト(現在はSQLプロジェクト)のVisualStudioの展開オプションを削除したSQLServer2012SSDTを使用しています。デプロイの場合と同じように公開ステップを自動化したいのですが、これを行う方法が明確ではありません。だから、いくつかの質問:

  1. プロジェクトに.publish.xmlを追加しました(最初の手動公開後、プロジェクトに追加をチェックします)。その後もデフォルトに設定すると、ダブルクリックするとビルドされますが、常に設定ウィンドウが表示され、続行するには[公開]ボタンをクリックする必要があります。このプロンプトをスキップして現在の値を使用する設定はありますか?

  2. 公開するたびに、SQL出力の​​バージョンが生成されるようです。これを抑制するにはどうすればよいですか?つまり、毎回ベースファイルを上書きしますか?

  3. そして最後に、自動ビルドに新しいプロジェクトタイプと公開コマンドを使用するようにビルドを更新するためのポインタをいただければ幸いです。

4

3 に答える 3

7

展開オプションを復元する方法: (Visual Studio 2010/2012 のみ -- Visual Studio 2013 ではサポートされなくなりました)

展開オプションは引き続き存在しますが、何らかの理由でメニューで使用できません。(呪われた Visual Studio チーム!) 次のように、ツールバーの 1 つに Deploy オプションを追加することで、この問題を回避しました。

  1. ツールバーの右側にある矢印をクリックします。
  2. [ボタンの追加と削除] をクリックし、[カスタマイズ] をクリックします。
  3. [カスタマイズ] ダイアログで、[コマンドの追加] をクリックします。
  4. [ビルド] カテゴリを選択し、[選択をデプロイ] コマンドを選択します。
  5. 選択を保存すると、[[プロジェクト名] をデプロイ] オプションがツールバーに表示されます。ボタンを有効にするには、ソリューション エクスプローラーでプロジェクトを選択する必要があります。

展開設定は公開設定とは異なることに注意してください。配置設定は、[デバッグ] タブのプロジェクトのプロパティで構成されます。


公開オプションに関する質問に答えるには:

1) デフォルトで特定のパブリッシュ ファイルを使用し、煩わしいプロンプトを回避する方法

これを回避する方法はないと思います。

2) 変更だけでなく、データベース全体を公開する方法

.publish.xml ファイルをテキスト エディターで開き、.xml を追加し<AlwaysCreateNewDatabase>true</AlwaysCreateNewDatabase>ます。

例えば:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <TargetDatabaseName>MyDatabase</TargetDatabaseName>
    <DeployScriptFileName>MyDatabaseProject.sql</DeployScriptFileName>
    <TargetConnectionString>Data Source=localhost\SQL2012;Integrated Security=True;Pooling=False</TargetConnectionString>
    <PublishDependentProjects>False</PublishDependentProjects>
    <ProfileVersionNumber>1</ProfileVersionNumber>
    <AlwaysCreateNewDatabase>true</AlwaysCreateNewDatabase>
  </PropertyGroup>
</Project>

3) 自動ビルドのコマンドライン構文

まず、.dacpac ファイルがビンに作成されるように、通常どおり msbuild を使用してプロジェクトをビルドします。

次にsqlpackage.exe、.publish.xml ファイルを使用して公開します。

C:\Program Files\Microsoft Visual Studio 10.0\Microsoft SQL Server Data Tools\sqlpackage.exe /Action:Publish /SourceFile:C:\[path to my project]\bin\Debug\MyDatabaseProject.dacpac /Profile:C:\[path to my project]\MyDatabaseProject.publish.xml

sqlpackage.exe へのパスは異なる場合があることに注意してください。

于 2012-04-18T18:10:41.283 に答える
4

パーティーに少し遅れたことは認めますが、これはこの議論に出くわした他の人を助けるかもしれません. 私の会社は現在 VS2012 に移行しており、Keith と同じ問題が 3 つすべてあります。#1 と #2 の回避策を見つけました。

#1 では、AutoHotKeyを使用してパブリッシュ ウィンドウの存在を監視し、[スクリプトの作成] ボタンを自動的にクリックします。もちろん、代わりにスクリプトに自動的に [公開] ボタンをクリックさせることもできます。この例では、発行プロファイルが「XYZ」でない場合 (実稼働サーバーの展開では常に手動で介入することを好みます)、Alt+G を送信してスクリプトを生成します。

#Persistent
SetTimer, ClosePopups, 5000

return

ClosePopups:
if WinExist("Publish Database ")
{
    WinActivate, Publish Database
    WinGetTitle, TitleText, A
    If not TitleText = "Publish Database XYZ.publish.xml" {
        Send, !G
    }
}
return 

#2 については、パブリッシュするたびに、ファイル名に数字のサフィックスが追加され、展開フォルダーに多数のファイルが作成されます。ビルド前にビルド前イベントを使用して、.sql ファイルと .txt ファイルをクリアしました。

if exist "$(ProjectDir)$(OutputPath)*.publish.sql" del $(ProjectDir)$(OutputPath)*.publish.sql
if exist "$(ProjectDir)$(OutputPath)*.txt" del $(ProjectDir)$(OutputPath)*.txt
于 2013-05-12T14:47:49.590 に答える
4

SSDT データベース プロジェクトの展開を自動化する最善の方法は、msbuild を使用することです。もともと VSTSDB を使用していて、*.dbproj ファイルに対して msbuild を使用していました。結局のところ、sqlproj ファイルをデプロイするための引数はまったく同じです。

古い引数リストが機能するため、public.xml ファイル スタイルの使用に切り替えませんでした。dbproj に対する vsdbcmd.exe と msbuild に関するかなりの量のドキュメントがあります。それを参考にさせていただきます。

FinalBuilder の実行用に定義した引数リストと実行出力を次に示します。

[ MSBuild Project [ C:\xx\xxx\xx\xx\MyProject.sqlproj ] ]
  Configuration : Release
  OutDir : C:\Builds\1\xxxxx\builddefname\Binaries\Release\
  DeployToDatabase : True
  TargetDatabase : ExistingDatabaseName
  TargetConnectionString : Data source=.;Integrated Security=SSPI;**
  Build started 3/23/2012 2:17:08 PM.
  Deployment script generated to:
  C:\Builds\1\xxxx\builddefname_FB\Binaries\Release\MyProject.sql
  Dropping FK_at_lusys_assetCategory_at_lusys_image...
  Creating FK_dcb28374eeabe8e715038984419...
  Creating FK_d82897e4acd966d4b136c242cef...
  Checking existing data against newly created constraints
  Update complete.
  Done Building Project "C:\xxx\xxxxxxx\xxxxxxxxx\MyProject.sqlproj" (Deploy target(s)).
  Build succeeded.
  0 Warning(s)
  0 Error(s)

msbuild コマンド ラインをまとめると、次のようになります。

msbuild XXX.sqlproj /target:Deploy /p:Configuration=xxx;OutDir=xxx;DeployToDatabase=True;TargetDatabase=xxxx;TargetConnectionString="xxxxx";AlwaysCreateNewDatabase=True
于 2012-04-06T16:09:22.973 に答える