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

Nic*_*nes 30 sql-server-2014 sqlpackage sql-server-data-tools

我已经使用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.
Run Code Online (Sandbox Code Playgroud)

我找到了关于此的最少信息; 我发现最接近的是发布到Azure 的问题.

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

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

Kev*_*ane 57

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

  • 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.

  • 在我的(64位)版本的Windows Server 2008 R2上,DAC Framework MSI将SqlPackage.exe放在C:\ Program Files文件夹中,而不是放在C:\ Program Files(x86)文件夹中.确保检查两个位置. (5认同)
  • @PeteStensønes工具与SQL Server分开(并且向后兼容).有关最新的SSDT,请访问https://msdn.microsoft.com/en-us/library/mt204009.aspx.对于SSMS,请访问https://msdn.microsoft.com/en-us/library/mt238290.aspx.这些是针对SQL Server 2016的.我还将更新此答案以反映最新工具为130的事实 (2认同)

小智 9

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

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

  • @MarkWalsh,我在命令行上运行`nuget.exe安装Microsoft.Data.Tools.Msbuild`.您也可以将它安装到另一个项目 - 您只需将EXE下拉到本地文件夹即可. (2认同)