Как подключить команду публикации SSDT в VS2012 для проекта базы данных

Цель состоит в том, чтобы связать цель или команду (например, произвольный исполняемый файл) для запуска после успешной публикации проекта базы данных из пользовательского интерфейса Visual Studio 2012 с помощью пункта меню «Публикация» в контекстном меню проекта базы данных (щелкнув правой кнопкой мыши базу данных). проект в обозревателе решений и выберите «Опубликовать»). У нас есть существующая пользовательская программа загрузки данных, которая выполняет массовую загрузку данных из XML-файлов (выгруженных из основных баз данных), и было бы очень удобно продолжать использовать этот существующий подход. Мы не можем использовать файл SQL после развертывания для загрузки данных, потому что это займет слишком много времени для загрузки и его сложно поддерживать (вручную). Данные, которые мы загружаем, представляют собой большой объем данных конфигурации, которые требуются приложению, а не транзакционные данные приложения (которые еще больше).

В настоящее время мы используем Microsoft Visual Studio Ultimate 2012, 11.0.60610.01 Update 3 и инструменты данных SQL Server 11.1.30618.1. Проект базы данных был создан с использованием шаблона проекта базы данных в VS2012 (.sqlproj). Мы публикуем как для SQL Server 2008 R2, так и для SQL Server 2012. Мы знаем о файле целей SSDT MSBuild, который включен в файл sqlproj, и его содержимом. Похоже, что ни одна из целей развертывания или публикации, определенных в этом файле, не выполняется VS2012 во время команды «Опубликовать». Однако цели сборки выполняются, когда проект создается из VS2012.

Вот что мы пробовали до сих пор безуспешно (каждый пункт ниже был предпринят по одному, изолированно):

  1. Привязал исполняемую команду к PostPublishEvent (аналогично PostBuildEvent).
  2. Привязал исполняемую команду к PostDeployEvent (аналогично PostBuildEvent).
  3. Подключил новую пользовательскую цель, которая зависит от цели AfterPublish, выполняющей команду.
  4. Подключил новую пользовательскую цель, которая зависит от цели AfterDeploy, выполняющей команду.
  5. Переопределите цель AfterPublish в файле sqlproj.
  6. Переопределите цель AfterDeploy в файле sqlproj.
  7. Переопределите цель SqlPublish в файле sqlproj.

Если я использую любой из вышеперечисленных методов «Опубликовать» и выполняю цель публикации с помощью MSBuild, все работает так, как ожидалось. Если я использую команду пользовательского интерфейса «Опубликовать» в VS2012, пользовательская команда никогда не выполняется. Если я подключаю пользовательскую команду к PostBuildEvent, она запускается через MSBuild и VS2012.

Похоже, что VS2012 использует другие средства для публикации проектов базы данных и не привязан к целям SSDT MSBuild, за исключением цели сборки.

Есть ли чистый способ подключить произвольную команду, которая выполняется после того, как команда «Опубликовать», вызванная из пользовательского интерфейса VS2012, завершается, в идеале, успешно?

Мне также известно об этом сообщении Опубликовать данные с помощью SSDT?, но это неприемлемо. подход по сравнению с существующими методами, использовавшимися до VS2012.

Спасибо!


person Wade    schedule 02.07.2013    source источник
comment
Написать пакетный файл, чтобы сделать все для каждого проекта? Мы используем msbuild для сборки проекта и создания файла dacpac. Мы используем sqlpackage.exe для публикации проекта. В случае наших новых загрузок мы затем вызываем отдельный скрипт, который заполняет базу данных начальным набором данных. Мы разделяем их на новые и другие типы развертывания. New не запускает сценарии после развертывания. Другие делают это, и мы используем их для постепенного добавления новых данных.   -  person Peter Schott    schedule 02.07.2013


Ответы (1)


Я тоже изучил это.

Насколько я могу судить, когда вы используете Publish... из контекстного меню VS 2012/2013, VS создает экземпляр SSDT SqlPublishTask напрямую, а не с использованием общих системных определений, предположительно, чтобы они могли интегрировать его в "Data окно "Инструменты".

Единственное решение, которое я могу придумать, это написать расширение, предоставляющее пункт (контекстного) меню, который позволит вам вызывать MSBuild с целью по вашему выбору. Справочник по Extension SDK содержит все необходимое для начала работы, а справку по MSBuild API можно найти в MSDN.

(быстрый поиск не выявил такого существующего расширения.)

К сожалению, у меня нет доступа к VS Pro, поэтому DiM не могу :(.

person The Real Edward Cullen    schedule 03.02.2014