4

私は現在、2.0 の代わりに DACFx 3.0 API を使用するように、チームのデータベース展開 Powershell スクリプトを書き直しています。Microsoft.SqlServer.Dac.DacServices新しいコントローラー クラスを使用して、DACPAC のアップグレードを正常に機能させることができました。

残っている唯一の問題は、現在の DACPAC バージョン番号を既存のデータベースから取得するにはどうすればよいかということです。

展開スクリプトの一部として、これをアップグレード先の DACPAC バージョンと比較して、展開が必要かどうかを判断します。これは、データベース関連のテストを実行するかどうかを決定するためにも使用されるため、この方法でビルドにかかる時間を大幅に短縮できます。

古い DacFx2.0 API はMicrosoft.SqlServer.Management.Dac名前空間に存在するため、古い Powershell スクリプトではDacStore、データベース接続からオブジェクトを作成し、そこから Version プロパティを取得するだけです。

以前の PowerShell スクリプト

$dacStore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverConnection)
Write-Host "The following data-tier applications (instances) exist in the DAC store:"
foreach($dacInstance in $dacStore.DacInstances) 
{
    Write-Host Instance Name: $dacInstance.Name
    Write-Host DAC Type Application Name: $dacInstance.Type.Name
    Write-Host DAC Type Version: $dacInstance.Type.Version <--- **** this is what I need ****
}
...

現在 3.0 の問題、API は名前空間にあり、「以前のバージョンのおよびクラスMicrosoft.SqlServer.Dacを使用する代わりに、ほとんどすべてがまったく新しいコントローラー クラスにリファクタリングされています。( src )」DacStoreDacExtractionUnitDacServices

DacStoreクラスで同等のものをDacServicesまだ見つけることができなかったため、現時点では、現在の DAC バージョンを取得する方法がわかりません。MSDN のドキュメントを検索してみましたが、Powershell のすべてのセクションで古い DACFx2.0 API が参照されていました。(例:ここ)。

誰かが私を助けることができれば、それは大歓迎です。ありがとう!

4

1 に答える 1

2

MSFT から返信がありました。

あなたが発見したように、Dac 3.0 API にはこの機能がありません。T-SQL を使用して、このデータを dbo.sysdac_instances から直接選択します。

実際にはそれが唯一の方法のようです: http://msdn.microsoft.com/en-us/library/ee240830.aspx だから私は本当にそれを見たいと思っていますが、今のところそのビューを照会しますある時点で DACFx API に取り込まれました。msdb は SQL Azure に存在しないため、ビューdbo.sysdac_instancesmastersデータベースにあることに注意してください。

于 2013-09-04T23:46:51.410 に答える