从命令行生成数据库项目

尽管 SQL 数据库项目扩展提供了图形用户界面来生成数据库项目,但 Windows、macOS 和 Linux 环境也提供了命令行生成体验。 在 SDK 样式的 SQL 项目与之前的非 SDK 样式的 SQL 项目格式中,通过命令行生成项目的步骤有所不同。 本文概述了针对这两种 SQL 项目类型,在命令行从 SQL 项目生成 dacpac 所需的先决条件和语法。

SDK 样式的 SQL 项目(预览版)

Microsoft.Build.SqlSDK 样式的 SQL 项目结合使用是通过命令行处理 SQL 项目的首选方法。

若要在 Windows、macOS 或 Linux 上通过命令行生成 SDK 样式的 SQL 项目,请使用以下命令:

dotnet build /p:NetCoreBuild=true

注意

SDK 样式的 SQL 项目目前为预览版。

非 SDK 样式的 SQL 项目

以下部分介绍在 Windows、macOS 和 Linux 上通过命令行处理非 SDK 样式的 SQL 项目的解决方法。

先决条件

  1. 安装并配置 SQL 数据库项目扩展

  2. 若要从 SQL 数据库项目的 Azure Data Studio 扩展支持的所有平台通过命令行生成 SQL 数据库项目,需要以下 .NET Core dll 和目标文件 Microsoft.Data.Tools.Schema.SqlTasks.targets。 在 Azure Data Studio 接口中完成的第一个生成过程中,扩展会创建这些文件,并将其置于 BuildDirectory 下的扩展文件夹中。 例如,在 Linux 上,这些文件位于 ~\.azuredatastudio\extensions\microsoft.sql-database-projects-x.x.x\BuildDirectory\。 将这 11 个文件复制到一个新的可访问的文件夹中,或记下其位置。 本文档中,该位置称为 DotNet Core build folder

    • Microsoft.Data.SqlClient.dll
    • Microsoft.Data.Tools.Schema.Sql.dll
    • Microsoft.Data.Tools.Schema.SqlTasks.targets
    • Microsoft.Data.Tools.Schema.Tasks.Sql.dll
    • Microsoft.Data.Tools.Utilities.dll
    • Microsoft.SqlServer.Dac.dll
    • Microsoft.SqlServer.Dac.Extensions.dll
    • Microsoft.SqlServer.TransactSql.ScriptDom.dll
    • Microsoft.SqlServer.Types.dll
    • System.ComponentModel.Composition.dll
    • System.IO.Packaging.dll
  3. 如果项目是在 Azure Data Studio 中创建的,请跳到从命令行生成项目。 如果项目是在 SQL Server Data Tools (SSDT) 中创建的,请在 Azure Data Studio SQL 数据库项目扩展中打开该项目。 在 Azure Data Studio 中打开项目会自动通过三次编辑更新 sqlproj 文件,请注意以下信息:

    1. 导入条件
    <Import Condition="'$(NetCoreBuild)' == 'true'" Project="$(NETCoreTargetsPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets"/> 
    <Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets"/>
    <Import Condition="'$(NetCoreBuild)' != 'true' AND '$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets"/>
    
    1. 包参考
    <ItemGroup>
        <PackageReference Condition="'$(NetCoreBuild)' == 'true'" Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All"/>
    </ItemGroup>
    
    1. 清理目标,这是在 SQL Server Data Tools (SSDT) 和 Azure Data Studio 中支持双重编辑所必需的
    <Target Name="AfterClean">
        <Delete Files="$(BaseIntermediateOutputPath)\project.assets.json"/>
    </Target>
    

从命令行生成项目

从完整的 .NET 文件夹中,使用以下命令:

dotnet build "<sqlproj file path>" /p:NetCoreBuild=true /p:NETCoreTargetsPath="<DotNet Core build folder>"

例如,通过 Linux 上的 /usr/share/dotnet

dotnet build "/home/myuser/Documents/DatabaseProject1/DatabaseProject1.sqlproj" /p:NetCoreBuild=true /p:NETCoreTargetsPath="/home/myuser/.azuredatastudio/extensions/microsoft.sql-database-projects-x.x.x/BuildDirectory"  

后续步骤