使用SqlPackage.exe将DACPAC发布到SQL Server 2014?

时间:2014-04-29 21:36:17

标签: sql-server-2014 sql-server-data-tools sqlpackage

我已经使用SqlPackage.exe成功将DACPAC发布到SQL Server 2008-2012实例,这是由SQL Server数据工具安装的(通常在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的problem

我已经掌握了SSDT补丁的最新信息,但我猜测我拥有的SqlPackage.exe(显示11.0.2902.0版本)完全不兼容。我可以使用Visual Studio 2012的发布命令发布到同一个实例,因此实例本身似乎不是问题。

是否有更新版本的SqlPackage支持将2014 DACPAC发布到2014服务器?或者另一种可编写脚本的方法吗?

3 个答案:

答案 0 :(得分:54)

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

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

    • 如果你有updated to the latest 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

答案 1 :(得分:9)

现在有一个官方Microsoft.Data.Tools.Msbuild NuGet包,其中包含SqlPackage.exe和blog post及其详细信息:

  

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

答案 2 :(得分: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 **