【问题标题】:Latest SSDT vs. SqlPackage incompatibility for SQL Server 2014SQL Server 2014 的最新 SSDT 与 SqlPackage 不兼容
【发布时间】:2017-01-14 05:44:14
【问题描述】:

我们的一个构建服务器刚刚更新到最新的“用于数据库工具的 Microsoft SQL Server 更新”(版本 12.0.60629.0),现在与我们拥有的 SqlPackage.exe 版本不兼容(在 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\SqlPackage.exe)。 SQL Server 数据库项目(面向 SQL Server 2014)构建没有错误,但是当我们尝试使用 SqlPackage.exe 将 .dacpac 部署到目标服务器时,我们收到以下错误:

The Element or Annotation class PersistedResolvableAnnotation does 
    not contain the Property class Length.

果然,将 model.xml 文件(在 .dacpac 中)与最新版本进行比较以获得成功构建,我在一些 Annotation 元素下看到了额外的“Length”和“Offset”属性:

<Annotation Type="PersistedResolvableAnnotation" Name="[$(MyLinkedServer)].[$(MyDatabase)]|[dbo].[SomeTableName]">
    <Property Name="TargetTypeStorage" Value="ISqlSynonymTarget" />
    <Property Name="Length" Value="63" />
    <Property Name="Offset" Value="37" />
</Annotation>

这些构建服务器只有 Visual Studio 2012 和 2013,没有 2015。很明显,这个最新的 SSDT 更新破坏了与 SqlPackage 的兼容性(还有其他 indications 在线相同问题),但我的问题是:我该如何解决?

我宁愿不尝试降级到以前的 SSDT 版本,但如有必要,我会这样做。我应该安装latest Data-Tier Application Framework 并改用它的 SqlPackage.exe 吗?还是安装 Visual Studio 2015?

【问题讨论】:

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


    【解决方案1】:

    在构建服务器上安装最新的 DacFx 或从使用 msi 中的 sqlpackage.exe 更改为 DacFx usnig 的 nuget 版本:

    https://blogs.msdn.microsoft.com/ssdt/2016/08/22/releasing-ssdt-with-visual-studio-15-preview-4-and-introducing-ssdt-msbuild-nuget-package/

    如果这使得 dacpac 不向后兼容,那么我会为它提出一个连接项,看看它是否是一个错误,如果不是,那么如果有此类事情的通知并且连接项应该得到滚动,那就太好了。

    埃德

    【讨论】:

    • 我喜欢在 NuGet 包中看到 SqlPackage.exe,但它是一个项目级包,不适合我的使用。我希望在 solution 级别的包中拥有像这样的解决方案范围的构建/测试工具(在 v3 中已删除,现在是 added back)。所以我似乎坚持使用 DacFx。
    • 如果您下载 nuget.exe,您可以控制它被提取到的位置(因此您可以在所有项目的部署脚本中引用它),方法是:“\nuget.exe install Microsoft.Data.Tools。 Msbuild -ExcludeVersion -Verbosity 详细 -Source nuget.org/api/v2" 它应该比 msi 更容易维护
    • @EdElliott 只是一个简短的说明 - 如果您的目标是 SQL2014 或更早版本,我们会尽力向后兼容旧版本的工具。在这种情况下,这是一个回归,我们序列化了不必要的数据,导致最小 DacFx 版本被颠簸。我们已经解决了这个问题,但如果您使用最新最好的工具,当然会更喜欢
    【解决方案2】:

    这是最近的 SSDT 更新中引入的问题。它已在内部修复,并计划包含在 SSDT 的下一个 (16.4) 版本中。 SSDT 版本最初通过SSDT download page 发布,并在SSDT Team Blog 上发布通知,然后在 2-3 周内推出 Visual Studio 扩展和更新(因为这在 VS 范围内单独进行)。

    • 注意:对于 VS2013 版本,请转到下载站点上的“以前的版本”页面。 SSDT 继续针对 VS2013 进行更新,但下载页面已针对用户进行了优化,以获取最新版本的 Visual Studio。

    披露:我在 SSDT 团队工作

    【讨论】:

    • 正是我希望听到的那个人——谢谢凯文!我会等待 16.4 修复。你能告诉我是否有办法降级到没有这个问题的 SSDT 版本?以前的版本可以在任何地方使用吗?
    • @NickJones 不幸的是,这种回归是在 11 月引入的。这是可能的,但您需要一个非常旧的版本 - 本质上是通过卸载 SSDT 回到 v120 堆栈。我建议改用新的 SqlPackage.exe。它实际上安装在 Visual Studio 12.0 文件夹中 - 查找 SqlPackage.exe 并选择 130 文件夹中的那个。我们将在几周内完成修复,希望这不会给您带来太多不便。
    • 我在 Visual Studio 12.0 文件夹下看到的唯一 sqlpackage.exe 在 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120 \sqlpackage.exe;没有 DAC\130 文件夹。我应该寻找其他地方吗?
    • 如果您有 12.0.60629.0 更新(或任何可以在 DB 项目的目标中看到“SQL Server 2016”的更新),您应该会看到 DAC\130 文件夹。它在那里吗?应该包含 SqlPackage...
    • @NickJones 是的,这是在 16.4 中。我建议直接更新到 16.5 - 它在 SqlPackage 中有一些不错的附加功能
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多