Последняя версия SSDT и несовместимость SqlPackage для SQL Server 2014

Один из наших серверов сборки был только что обновлен до последней версии «Microsoft SQL Server Update для инструментов базы данных» (версия 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) строится без ошибок, но когда мы пытаемся развернуть .dacpac на целевом сервере с помощью SqlPackage.exe, мы получаем следующую ошибку:

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

Разумеется, сравнивая файлы model.xml (внутри .dacpac) на предмет успешной сборки с этой последней, я вижу дополнительные свойства «Длина» и «Смещение» под некоторыми элементами аннотации:

<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 (и есть другие признаки этой же проблемы в Интернете), но мой вопрос: как мне решить эту проблему?

Я бы предпочел не переходить на предыдущую версию SSDT, но при необходимости сделаю это. Следует ли мне установить последнюю платформу приложений уровня данных и вместо этого использовать его SqlPackage.exe? Или установить Visual Studio 2015?


person Nick Jones    schedule 06.09.2016    source источник


Ответы (2)


Это проблема, появившаяся в недавнем обновлении SSDT. Он был исправлен внутри и предназначен для включения в следующую (16.4) версию SSDT. Выпуски SSDT первоначально выпускаются через страницу загрузки SSDT с уведомлениями на блог группы SSDT, а затем развернуть через расширения и обновления Visual Studio в течение 2-3 недель (как это выполняется по отдельному графику для всей VS).

  • Примечание. Для выпусков VS2013 перейдите на страницу «Предыдущие выпуски» на сайте загрузки. SSDT продолжает обновляться для VS2013, но страница загрузки оптимизирована для пользователей, чтобы они могли получить последнюю версию Visual Studio.

Раскрытие информации: я работаю в команде SSDT

person Kevin Cunnane    schedule 07.09.2016
comment
Как раз тот человек, от которого я надеялась услышать - спасибо, Кевин! Подожду на 16.4 исправления. Можете ли вы сказать мне, есть ли способ перейти на версию SSDT, в которой не было этой проблемы? Доступны ли где-нибудь предыдущие выпуски? - person Nick Jones; 07.09.2016
comment
@NickJones, к сожалению, эта регрессия появилась еще в ноябре. Это возможно, но вам понадобится очень старая версия - по сути, вернуться к стеку v120, удалив SSDT. Вместо этого я бы рекомендовал использовать новый SqlPackage.exe. На самом деле он установлен в папке Visual Studio 12.0 - найдите SqlPackage.exe и выберите тот, который находится в папке 130. Мы исправим это через пару недель, так что, надеюсь, это не доставит вам особых неудобств. - person Kevin Cunnane; 07.09.2016
comment
Единственный файл sqlpackage.exe, который я вижу в папке Visual Studio 12.0, находится в C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ Extensions \ Microsoft \ SQLDB \ DAC \ 120 \ sqlpackage.exe; нет папки DAC \ 130. Должен ли я искать где-нибудь еще? - person Nick Jones; 07.09.2016
comment
Если у вас есть обновление 12.0.60629.0 (или любое обновление, в котором вы можете видеть SQL Server 2016 в целях проекта БД), вы должны увидеть папку DAC \ 130. Это там? SqlPackage должен быть включен ... - person Kevin Cunnane; 08.09.2016
comment
Ага, ты прав. Я смотрел на машину, на которой еще не было обновления 12.0.60629.0. Проверяя тот, в котором он есть, вижу папку DAC \ 130. Я настрою наши инструменты сборки, чтобы использовать это местоположение, если оно доступно. - person Nick Jones; 08.09.2016
comment
Я вижу, что сейчас есть версии SSDT 16.4 и 16.5. Можете ли вы подтвердить, что одно из этих исправлений устраняет эту регрессионную ошибку? - person Nick Jones; 01.11.2016
comment
@NickJones да, это было в версии 16.4. Я бы порекомендовал обновить сразу до 16.5 - в SqlPackage есть несколько хороших дополнительных функций. - person Kevin Cunnane; 01.11.2016

Установите последнюю версию DacFx на сервер сборки или измените использование sqlpackage.exe в msi на nuget-версию DacFx usnig:

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

Если это делает dacpac несовместимым с предыдущими версиями, я бы поднял для него элемент подключения и посмотрел, является ли это ошибкой, в противном случае было бы хорошо, если бы было уведомление о подобных вещах, и элемент подключения должен был получить это вращение.

Ed

person Ed Elliott    schedule 06.09.2016
comment
Мне нравится видеть SqlPackage.exe в пакете NuGet, но это пакет уровня проекта, который мне не подходит. Я ожидаю, что в пакетах уровня solution (которые были удалены в версии 3 и теперь являются добавлено обратно). Так что, похоже, я застрял с DacFx. - person Nick Jones; 06.09.2016
comment
Если вы загружаете nuget.exe, вы можете контролировать, куда он извлекается (чтобы вы могли ссылаться на это в своих сценариях развертывания во всех проектах), используя: \ nuget.exe install Microsoft.Data.Tools.Msbuild -ExcludeVersion -Verbosity detail -Source nuget.org/api/v2, это должно быть проще поддерживать, чем msi - person Ed Elliott; 06.09.2016
comment
@EdElliott просто небольшое примечание - если вы ориентируетесь на SQL2014 или более раннюю версию, мы делаем все возможное, чтобы обеспечить обратную совместимость со старыми версиями инструментов. В этом случае это была регрессия, когда мы сериализовали данные, которые не были необходимы, и это вызывало сбой минимальной версии DacFx. Мы исправили это, но, конечно, предпочли бы, чтобы вы использовали новейшие и лучшие инструменты. - person Kevin Cunnane; 07.09.2016