30

我已经使用 SqlPackage.exe 成功地将 DACPAC 发布到 SQL Server 2008-2012 实例,由 SQL Server Data Tools 安装(通常在 中找到C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin)。但是,在尝试使用相同的 SqlPackage.exe 将面向 2014 的 DACPAC 发布到 SQL Server 2014 实例时,我得到以下信息:

*** Could not deploy package.
Internal Error. The database platform service with type Microsoft.Data.Tools.
Schema.Sql.Sql120DatabaseSchemaProvider is not valid. You must make sure the
service is loaded, or you must provide the full type name of a valid database
platform service.

我发现有关此的最少信息;我发现最接近的是发布到 Azure的问题。

我一直在更新 SSDT 补丁,但我猜我拥有的 SqlPackage.exe(显示 11.0.2902.0 版本)根本不兼容。我可以使用 Visual Studio 2012 的 Publish 命令发布到同一个实例,因此实例本身似乎不是问题。

是否有更新版本的 SqlPackage 可以支持将 2014 DACPAC 发布到 2014 服务器?或者另一种可编写脚本的方式来做到这一点?

4

3 回答 3

58

是的,有一个支持 SQL Server 2005-2016 的新版本可用,它安装到与以前的(SQL Server 2012 和更低版本)版本不同的位置。事实上,根据您是仅使用 SSDT 还是将其作为 SSMS 的一部分或独立安装程序安装,您将拥有不同的安装位置。

  • SSDT 在最新版本的 Visual Studio 中安装 Dac DLL。这是为了避免需要全部更新才能使用最新代码的并行问题(Visual Studio 2012 vs 2013 vs SSMS)。

    • 如果你已经更新到最新的 SSDT,你会在VS Install Directory\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130中找到 SqlPackage.exe 和相关的 DLL 。对于 VS2013,VS 安装目录是C:\Program Files (x86)\Microsoft Visual Studio 12.0,对于 VS2015 是 14.0。
  • SQL Server Management Studio (SSMS)和独立的Dac Framework MSI都安装到系统范围的位置。这是C:\Program Files (x86)\Microsoft SQL Server\130\Dac\bin

于 2014-04-29T22:43:27.453 回答
9

现在有一个官方的Microsoft.Data.Tools.Msbuild NuGet 包,其中包含 SqlPackage.exe 和包含详细信息的 博客文章

此 NuGet 包包含构建和发布 SQL 项目 (.sqlproj) 所需的所有组件。这支持持续集成和持续部署方案——可以在本地构建代理上构建 SQL 项目,而无需安装完整的 Visual Studio 或 SQL Server Data Tools (SSDT) 产品。

于 2016-10-12T06:07:10.343 回答
1

SSDT 在最新版本的 Visual Studio 中安装 Dac DLL。这是为了避免需要全部更新才能使用最新代码的并行问题(Visual Studio 2012 vs 2013 vs SSMS)。如果您已更新到最新的 SSDT,您会在 VS 安装目录\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130 中找到 SqlPackage.exe 和相关的 DLL。对于 VS2013,VS 安装目录是 C:\Program Files (x86)\Microsoft Visual Studio 12.0,对于 VS2015 是 14.0。SQL Server Management Studio (SSMS) 和独立的 Dac Framework MSI 都安装到系统范围的位置。这是 C:\Program Files (x86)\Microsoft SQL Server\130\Dac\bin。

** Kevin Cunnane 先生的回答。是一个正确的过程,但如果 sql2016 中的数据库使用 140\dac **

于 2017-11-13T15:27:24.493 回答