Преобразование исходного проекта SQL в проект в стиле SDK

Применимо к:SQL ServerБазы данных Azure SQLУправляемому экземпляру Azure SQLБазе данных SQL в Microsoft Fabric

Создание проекта SQL в стиле ПАКЕТА SDK — это быстрая задача. Однако, если у вас уже есть SQL-проекты, вы можете конвертировать их в SDK-проекты, чтобы воспользоваться новыми возможностями.

После конвертации проекта можно использовать новые функции проекта в стиле SDK, такие как:

  • Поддержка кроссплатформенной сборки
  • Упрощённый формат файла проекта
  • Ссылки на пакеты

Чтобы аккуратно завершить конвертацию, следуйте следующим шагам:

  1. Создайте резервную копию исходного файла проекта.
  2. .dacpac Создайте файл из исходного проекта для сравнения.
  3. Измените файл проекта в проект в стиле ПАКЕТА SDK.
  4. .dacpac Создайте файл из измененного проекта для сравнения.
  5. Убедитесь, что .dacpac файлы одинаковы.

SQL Server Data Tools (SSDT) в Visual Studio не поддерживает проекты в стиле SDK. После конвертации проекта используйте один из следующих инструментов для создания или редактирования проекта:

  • Расширение SQL Database Projects в Visual Studio Code
  • Database DevOps в SQL Server Management Studio (SSMS)
  • Командная строка
  • Средства работы с данными SQL Server в стиле SDK (предварительная версия) в Visual Studio 2022

Note

Возможно, проект SQL содержит настройку, которая расширяет необходимые изменения после этих шагов. Помимо этой статьи, репозиторий DacFx GitHub можно использовать для понимания изменений, необходимых для обновления исходного проекта SQL до проектов SQL в стиле SDK.

Prerequisites

Шаг 1. Создание резервной копии исходного файла проекта

Перед преобразованием проекта создайте резервную копию исходного файла проекта. Таким образом, при необходимости можно вернуться к исходному проекту.

В Проводнике создайте копию файла .sqlproj для проекта, который нужно преобразовать, добавив .original к расширению файла. Например, MyProject.sqlproj преобразуется в MyProject.sqlproj.original.

Шаг 2. Создание .dacpac файла из исходного проекта для сравнения

Откройте проект в Visual Studio. Файл .sqlproj по-прежнему находится в исходном формате, поэтому его можно открыть в исходном sql Server Data Tools.

Соберите проект в Visual Studio, щелкнув правой кнопкой мыши по узлу базы данных в Обозревателе решений и выбрав "Сборка".

Чтобы создать .dacpac файл из исходного проекта, необходимо использовать SQL Server Data Tools (SSDT) в Visual Studio. Откройте файл проекта в Visual Studio с установленными исходными средствами данных SQL Server.

Соберите проект в Visual Studio, щелкнув правой кнопкой мыши по узлу базы данных в Обозревателе решений и выбрав "Сборка".

Откройте папку проекта в Visual Studio Code. В представлении проектов баз данных Visual Studio Code нажмите правой кнопкой мыши на узел проекта и выберите Сборка.

Чтобы создать .dacpac файл из исходного проекта, необходимо использовать SQL Server Data Tools (SSDT) в Visual Studio. Откройте файл проекта в Visual Studio с установленными исходными средствами данных SQL Server.

Соберите проект в Visual Studio, щелкнув правой кнопкой мыши по узлу базы данных в Обозревателе решений и выбрав "Сборка".

Вы можете создавать проекты базы данных SQL из командной dotnet build строки с помощью команды.

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

Процесс сборки создает .dacpac файл в bin\Debug папке проекта по умолчанию. С помощью Проводника найдите .dacpac, созданный в процессе сборки, и скопируйте его в новую папку вне каталога проекта под именем original_project.dacpac. Используйте этот .dacpac файл для сравнения, чтобы позже подтвердить свою конверсию.

Шаг 3. Изменение файла проекта на проект в стиле SDK

Изменение файла проекта — это ручной процесс, который лучше всего выполняется в текстовом редакторе. .sqlproj Откройте файл в текстовом редакторе и внесите следующие изменения:

Обязательный: добавление ссылки на пакет SDK

В элементе проекта добавьте элемент Sdk для ссылки на Microsoft.Build.Sql и последнюю версию из https://www.nuget.org/packages/Microsoft.build.sql, где #.#.# включен в фрагмент ниже.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0">
  <Sdk Name="Microsoft.Build.Sql" Version="#.#.#" />
...

Необходимо удалить ненужные импорты целей сборки

Исходные проекты SQL ссылались на несколько целевых объектов сборки и свойств в инструкциях import. <Import/> За исключением элементов, которые вы явно добавили, что является уникальным и преднамеренным изменением, удалите строки, начинающиеся с<Import ...>. Примеры, которые следует удалить, если они присутствуют в .sqlproj:

...
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Condition="..." Project="...\Microsoft.Data.Tools.Schema.SqlTasks.targets"/>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
...

Обязательный: удаление папки свойств

Исходные проекты SQL содержат запись для папки Properties, которая предоставляет доступ к свойствам проекта в Обозревателе решений. Удалите этот элемент из файла проекта.

Пример для удаления, если он присутствует в вашем .sqlproj:

<ItemGroup>
  <Folder Include="Properties" />
</ItemGroup>

Обязательный: удаление элементов сборки, включенных по умолчанию

Исходные проекты SQL явно перечисляют в файле проекта все файлы .sql, представляющие объекты базы данных, в качестве элементов <Build Include="..." />. В SQL-проектах в стиле SDK любые .sql файлы из дерева папок проекта (**/*.sql) включены по умолчанию. Удалите файлы, .sql указанные в <Build Include="...." /> элементах для этих файлов, чтобы избежать проблем с производительностью сборки.

Удалите такие строки, как следующие, из файла проекта:

  <Build Include="SalesLT/Products.sql" />
  <Build Include="SalesLT/SalesLT.sql" />
  <Build Include="SalesLT/Categories.sql" />
  <Build Include="SalesLT/CategoriesProductCount.sql" />

Не удаляйте:

  • <Build Include="..." /> элементы для .sql файлов, которые отсутствуют в дереве папок проекта SQL
  • <PreDeploy Include="..." /> или <PostDeploy Include="..." /> элементы, потому что эти узлы диктуют специфическое поведение для этих файлов
  • Элементы, не являющиеся файлами .sql, например файлы .publish.xml в элементах <None Include="..." />, файлы .refactorlog.xml в элементах <RefactorLog Include="..." /> или файлы .xsd в элементах <Build Include="..." />

Необязательно. Удаление ссылок SSDT

Оригинальные SQL Server Data Tools (SSDT) требовали дополнительного содержимого в файле проекта для обнаружения установки Visual Studio. Эти строки являются ненужными в проектах SQL в стиле ПАКЕТА SDK и могут быть удалены:

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
    <!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
    <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
    <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
  </PropertyGroup>

Необязательно. Удаление параметров сборки по умолчанию

Исходные SQL-проекты включают два больших блока с параметрами сборки Release и Debug, тогда как в SQL-проектах в стиле SDK SDK уже содержит значения по умолчанию для этих параметров. Если у вас нет настроек для параметров сборки, попробуйте удалить следующие блоки:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <OutputPath>bin\Release\</OutputPath>
    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath>bin\Debug\</OutputPath>
    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

Справочник свойств проекта под номером перечисляет доступные свойства и их значения по умолчанию.

Шаг 4. Файлы решения

Файл проекта может быть указан в файле решения (.sln). Если у вас есть файл решения, обновите его, чтобы он ссылался на новый файл проекта в стиле SDK. Если у вас нет файла решения, можно пропустить этот раздел и перейти к шагу 5.

Вариант 1. Создание файла решения

Если файл решения содержит только SQL-проект, проще удалить файл решения и создать новый файл решения с проектом в стиле SDK.

dotnet new sln --name MySolution
dotnet sln MySolution.sln add MyDatabaseProject\MyDatabaseProject.sqlproj

Вариант 2. Изменение файла решения

Если файл решения содержит несколько проектов, обновите файл решения, чтобы он ссылался на новый файл проекта в стиле SDK. Файл решения можно изменить в текстовом редакторе и изменить ссылку проекта на новый файл проекта SDK-стиля. Ссылка на проект в файле решения должна выглядеть следующим образом:

Project("{PROJECT_TYPE_GUID}") = "MyDatabaseProject", "MyDatabaseProject\MyDatabaseProject.sqlproj", "{PROJECT_GUID}"
EndProject

Значение PROJECT_TYPE_GUID для проекта Microsoft.Build.Sql — 42EA0DBD-9CF1-443E-919E-BE9C484E4577. PROJECT_GUID — это уникальный идентификатор проекта, находящийся в элементе <ProjectGuid> файла проекта. Если у вас есть файл решения с вашим проектом, менять PROJECT_GUID значение не нужно. Измените значение PROJECT_TYPE_GUID на GUID типа проекта Microsoft.Build.Sql.

Шаг 5. Создание .dacpac файла из измененного проекта для сравнения

Проект SQL больше не совместим с Visual Studio 2022. Чтобы построить или отредактировать проект, используйте один из следующих вариантов:

  • Командная строка
  • Расширение SQL Database Projects в Visual Studio Code
  • SQL Server Data Tools в стиле SDK (предварительная версия) в Visual Studio 2022
  • SQL Server Management Studio (SSMS) с рабочей нагрузкой Database DevOps (предварительная версия)

Файл проекта теперь находится в формате пакета SDK, но чтобы открыть его в Visual Studio 2022, необходимо установить SQL Server Data Tools, стиль SDK (предварительная версия). Откройте проект в Visual Studio 2022 с установленными предварительными версиями SQL Server Data Tools и SDK-style.

Откройте папку проекта в Visual Studio Code. В представлении проектов баз данных Visual Studio Code нажмите правой кнопкой мыши на узел проекта и выберите Сборка.

Откройте файл проекта в SQL Server Management Studio (SSMS) с установленной нагрузкой Database DevOps (предварительный просмотр). В "Обозревателе объектов" нажмите правой кнопкой на проект базы данных и выберите Сборка.

Вы можете создавать проекты базы данных SQL из командной dotnet build строки с помощью команды.

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

Процесс сборки создает .dacpac файл в bin\Debug папке проекта по умолчанию. Используя Проводник файлов, найдите .dacpac созданный процессом сборки и скопируйте его в новую папку вне каталога проекта. Используйте этот .dacpac файл для сравнения, чтобы позже подтвердить свою конверсию.

Шаг 6. Убедитесь, что .dacpac файлы одинаковы

Чтобы убедиться, что преобразование выполнено успешно, сравните .dacpac файлы, созданные из исходных и измененных проектов. Используйте возможности сравнения схем SQL-проектов, чтобы визуализировать различия в моделях баз данных между двумя .dacpac файлами. В качестве альтернативы используйте утилиту командной строки DacpacVerify для сравнения двух .dacpac файлов, включая их сценарии до и после развертывания и настройки проекта.

Вы можете установить DacpacVerify как инструмент для dotnet. Чтобы установить средство, выполните следующую команду:

dotnet tool install --global Microsoft.DacpacVerify --prerelease

Синтаксис DacpacVerify заключается в указании пути к двум файлам .dacpac как dacpacverify <source DACPAC path> <target DACPAC path>. Чтобы сравнить два .dacpac файла, выполните следующую команду:

DacpacVerify original_project.dacpac modified_project.dacpac

Средство сравнения схем можно использовать для сравнения объектов в файлах .dacpac .

Запустите Visual Studio без загрузки проекта. Перейдите в Средства>SQL Server>Сравнение новых схем. Выберите исходный .dacpac файл в качестве источника и измененного .dacpac файла в качестве целевого объекта. Для получения дополнительной информации об использовании функции Schema Compare в Visual Studio см. статью «Использование сравнения схем для сравнения различных определений баз данных».

Сравнение графических схем пока недоступно в предварительной версии SQL-проектов в стиле SDK в Visual Studio. Используйте Visual Studio Code для сравнения схем.

Если вы еще не установили его, установите в Visual Studio Code расширение SQL Server Schema Compare. Запустите новое сравнение схем из палитры команд, открыв палитру команд с помощью Ctrl/Cmd+Shift+P и введя Schema Compare.

Выберите исходный .dacpac файл в качестве источника и измененного .dacpac файла в качестве целевого объекта.

Сравнение графических схем недоступно в SQL Server Management Studio. Используйте Visual Studio Code или Visual Studio для сравнения схем.

Сравнение графических схем доступно в Visual Studio и Visual Studio Code.

При сравнении схем результаты не должны отображаться. Отсутствие различий означает, что исходные и измененные проекты эквивалентны, создавая ту же модель базы данных в .dacpac файле.

Note

Сравнение .dacpac файлов с помощью сравнения схем не проверяет скрипты предварительного и постразвертывательного развертывания, refactorlog или другие параметры проекта. Он проверяет только модель базы данных. С помощью служебной программы командной строки DacpacVerify рекомендуется проверить, эквивалентны ли два .dacpac файла.