4

我目前正在重写我团队的数据库部署 Powershell 脚本以使用 DACFx 3.0 API 而不是 2.0。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命名空间中,并且“不再使用以前版本中的DacStoreDacExtractionUnit类,大多数内容都已重构为全新的DacServices控制器类。(src)”

我还没有DacStoreDacServices课堂上找到等效的,所以到目前为止我不知道如何检索当前的 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。请注意,视图dbo.sysdac_instances位于masters数据库中,因为 SQL Azure 中不存在 msdb。

于 2013-09-04T23:46:51.410 回答