SQL Server: DacPac удаляет все, когда ссылается на другой проект SSDT

У нас есть следующая структура проекта SSDT:

Проект DBCore: включает в себя все объекты, которые не являются эксклюзивными для SQL Server Edition.

Проект DBStandardEdition: включает в себя все специфические объекты стандартной редакции.

Проект DBStandardedition ссылается на проект DBCore с опцией "та же база данных".

Когда я публикую проект DBStandardEdition на моем демонстрационном сервере напрямую через Visual Studio, все работает. Все связанные со стандартной версией объекты созданы правильно.

Когда я сравниваю базу данных на демонстрационном сервере с моим файлом dacpac с помощью инструмента сравнения схем в Visual Studio, инструмент хочет отбросить все объекты, которые я определил в проекте DBStandardEdition. У нас также есть программа, которая публикует файлы dacpac с помощью класса DacServices (DacServices.Deploy). Эта программа фактически удаляет все, что определено в моем файле DBStandardEdition.dacpac.

Я что-то здесь не так делаю или это ошибка?

Обновление Я выяснил проблему в настройках своего проекта. Я установил "Имя выходного файла сборки" для всех объектов базы данных в одно и то же значение. После того как я изменил это, Visual Studio создает два DacPac - файлы в моей папке DBStandardEdition\Bin\Release. DBCore.dacpac и DBStandardEdition.dacpac. Теперь, когда я использую инструмент сравнения Visual Studio для сравнения DBStandardEdition.dacpac с моей базой данных (и включаю опцию "Включить составные объекты (только цель базы данных)"), все выглядит хорошо. Недавно добавленные объекты в проект DBCore перечислены с "Добавить", все мои объекты в моих проектах DBStandardEdition все еще там. Когда я активирую опцию Deployoption "Включить составные объекты...", все развертывается нормально.

1 ответ

Решение

Необходимо включить параметр "Включить составные объекты (только для базы данных)" в параметрах сравнения схем. Это отключено по умолчанию и означает, что указанные объекты исключаются из сравнения.

Другие вопросы по тегам