Konvertera ett ursprungligt SQL-projekt till ett SDK-projekt

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Att skapa ett nytt SQL-projekt i SDK-stil är en snabb uppgift. Men om du har befintliga SQL-projekt kan du konvertera dem till SDK-liknande SQL-projekt för att dra nytta av de nya funktionerna.

Efter att du konverterat projektet kan du använda de nya funktionerna i SDK-liknande projektet, såsom:

  • Stöd för bygge på flera plattformar
  • Förenklat projektfilformat
  • Paketreferenser

För att genomföra konverteringen noggrant, följ dessa steg:

  1. Skapa en säkerhetskopia av den ursprungliga projektfilen.
  2. Skapa en .dacpac fil från det ursprungliga projektet för jämförelse.
  3. Ändra projektfilen till ett SDK-projekt.
  4. Skapa en .dacpac fil från det ändrade projektet för jämförelse.
  5. Kontrollera att de .dacpac filerna är desamma.

SQL Server Data Tools (SSDT) i Visual Studio stöder inte SDK-liknande projekt. Efter att du konverterat projektet, använd ett av följande verktyg för att bygga eller redigera projektet:

  • SQL Database Projects-tillägget i Visual Studio Code
  • Databas-DevOps i SQL Server Management Studio (SSMS)
  • Kommandorad
  • SQL Server Data Tools av typen SDK (förhandsversion) i Visual Studio 2022

Note

Du kanske upptäcker att SQL-projektet innehåller anpassningar som utökar de ändringar som krävs utöver de här stegen. Utöver den här artikeln kan DacFx GitHub-lagringsplatsen användas för att förstå de ändringar som krävs för att uppgradera från ett ursprungligt SQL-projekt till SQL-projekt i SDK-stil.

Prerequisites

Steg 1: Skapa en säkerhetskopia av den ursprungliga projektfilen

Innan du konverterar projektet skapar du en säkerhetskopia av den ursprungliga projektfilen. På så sätt kan du återgå till det ursprungliga projektet om det behövs.

I Filutforskaren skapar du en kopia av .sqlproj-filen för projektet du vill konvertera, med .original tillagt till filändelsen. Till exempel blir MyProject.sqlprojMyProject.sqlproj.original.

Steg 2: Skapa en .dacpac fil från det ursprungliga projektet för jämförelse

Öppna projektet i Visual Studio. Den .sqlproj filen är fortfarande i ursprungligt format, så du öppnar den i de ursprungliga SQL Server Data Tools.

Skapa projektet i Visual Studio genom att högerklicka på databasnoden i Prieskumník riešení och välja Skapa.

Om du vill skapa en .dacpac fil från det ursprungliga projektet måste du använda de ursprungliga SQL Server Data Tools (SSDT) i Visual Studio. Öppna projektfilen i Visual Studio med de ursprungliga SQL Server Data Tools installerade.

Skapa projektet i Visual Studio genom att högerklicka på databasnoden i Prieskumník riešení och välja Skapa.

Öppna projektmappen i Visual Studio Code. I vyn Databasprojekt i Visual Studio Code högerklickar du på projektnoden och väljer Skapa.

Om du vill skapa en .dacpac fil från det ursprungliga projektet måste du använda de ursprungliga SQL Server Data Tools (SSDT) i Visual Studio. Öppna projektfilen i Visual Studio med de ursprungliga SQL Server Data Tools installerade.

Skapa projektet i Visual Studio genom att högerklicka på databasnoden i Prieskumník riešení och välja Skapa.

Du kan skapa SQL-databasprojekt från kommandoraden med hjälp av dotnet build kommandot .

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

Byggprocessen skapar en .dacpac fil i bin\Debug-mappen i projektet som standard. Använd Filutforskaren, hitta det .dacpac som skapats av byggprocessen och kopiera det till en ny mapp utanför projektkatalogen som original_project.dacpac. Använd denna .dacpac fil för jämförelse för att validera din konvertering senare.

Steg 3: Ändra projektfilen till ett SDK-liknande projekt

Att ändra projektfilen är en manuell process som bäst utförs i en textredigerare. Öppna filen .sqlproj i en textredigerare och gör följande ändringar:

Obligatoriskt: Lägg till SDK-referensen

I projektelementet lägger du till ett Sdk objekt för att referera till Microsoft.Build.Sql och den senaste versionen från https://www.nuget.org/packages/Microsoft.build.sql där #.#.# ingår i kodfragmentet nedan.

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

Krävs: Ta bort onödiga importer av kompileringsmål

Ursprungliga SQL-projekt refererar till flera byggmål och egenskaper i importinstruktioner. Förutom <Import/> objekt som du uttryckligen har lagt till, vilket är en unik och avsiktlig ändring, tar du bort rader som börjar med <Import ...>. Exempel som du kan ta bort om de finns i din .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" />
...

Obligatoriskt: Ta bort mappen Egenskaper

Ursprungliga SQL-projekt har en post för en Properties mapp som representerar åtkomst till projektegenskaperna i Solution Explorer. Ta bort detta objekt från projektfilen.

Exempel för att ta bort om det finns i din .sqlproj:

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

Obligatoriskt: Ta bort byggobjekt som ingår som standard

Ursprungliga SQL-projekt visar en lista över alla .sql filer som representerar databasobjekt explicit i projektfilen som <Build Include="..." /> objekt. I SDK-liknande SQL-projekt inkluderas alla .sql filer i projektmappens träd (**/*.sql) som standard. Ta bort filerna .sql som anges i <Build Include="...." /> artiklar för dessa filer för att undvika problem med byggprestandan.

Ta bort rader som följande från projektfilen:

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

Ta inte bort:

  • <Build Include="..." /> objekt för .sql filer som inte finns i SQL-projektmappsträdet
  • <PreDeploy Include="..." /> eller <PostDeploy Include="..." /> objekt, eftersom dessa noder styr specifikt beteende för dessa filer
  • Objekt som inte .sql är filer, såsom .publish.xml filer i <None Include="..." /> objekt, .refactorlog.xml filer i <RefactorLog Include="..." /> objekt eller .xsd filer i <Build Include="..." /> objekt

Valfritt: Ta bort SSDT-referenser

Det ursprungliga SQL Server Data Tools (SSDT) krävde extra innehåll i projektfilen för att identifiera Visual Studio-installationen. Dessa rader är onödiga i SQL-projekt i SDK-format och kan tas bort:

  <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>

Valfritt: Ta bort standardversionsinställningar

Ursprungliga SQL-projekt inkluderar två stora block för Release- och Debug-bygginställningar, medan SDK-liknande SQL-projekt känner till standardinställningarna för dessa alternativ. Om du inte har anpassningar till bygginställningarna kan du överväga att ta bort följande block:

  <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>

I projektegenskaper referens visas tillgängliga egenskaper och deras standardvärden.

Steg 4: Lösningsfiler

Projektfilen kan refereras till i en lösningsfil (.sln). Om du har en lösningsfil, uppdatera den för att referera till den nya SDK-liknande projektfilen. Om du inte har någon lösningsfil kan du hoppa över det här avsnittet och gå vidare till steg 5.

Alternativ 1: Skapa en ny lösningsfil

Om lösningsfilen bara innehåller SQL-projektet är det enklare att ta bort lösningsfilen och skapa en ny lösningsfil med SDK-liknande projektet.

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

Alternativ 2: Redigera lösningsfilen

Om lösningsfilen innehåller flera projekt, uppdatera lösningsfilen för att referera till den nya SDK-liknande projektfilen. Du kan redigera lösningsfilen i en textredigerare och ändra projektreferensen till den nya SDK-projektfilen. Projektreferensen i lösningsfilen bör se ut så här:

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

Värdet PROJECT_TYPE_GUID för ett Microsoft.Build.Sql-projekt är 42EA0DBD-9CF1-443E-919E-BE9C484E4577. Det är PROJECT_GUID en unik identifierare för projektet som finns i projektfilelementet <ProjectGuid> . Om du har en lösningsfil med ditt projekt behöver du inte ändra PROJECT_GUID värdet. Ändra värdet PROJECT_TYPE_GUID till Microsoft.Build.Sql-projektets projekttyp-GUID.

Steg 5: Skapa en .dacpac fil från det ändrade projektet för jämförelse

SQL-projektet är inte längre kompatibelt med Visual Studio 2022. För att bygga eller redigera projektet, använd ett av följande alternativ:

  • Kommandorad
  • SQL Database Projects-tillägget i Visual Studio Code
  • SQL Server Data Tools i SDK-format (förhandsvisning) i Visual Studio 2022
  • SQL Server Management Studio (SSMS) med Database DevOps arbetsbelastning (förhandsversion)

Projektfilen är nu i SDK-format, men om du vill öppna den i Visual Studio 2022 måste du ha SQL Server Data Tools, SDK-format (förhandsversion) installerat. Öppna projektet i Visual Studio 2022 med SQL Server Data Tools, SDK-format (förhandsversion) installerat.

Öppna projektmappen i Visual Studio Code. I vyn Databasprojekt i Visual Studio Code högerklickar du på projektnoden och väljer Skapa.

Öppna projektfilen i SQL Server Management Studio (SSMS) med arbetsbelastningen Database DevOps (förhandsversion) installerad. Högerklicka på databasprojektet i Objektutforskaren och välj Skapa.

Du kan skapa SQL-databasprojekt från kommandoraden med hjälp av dotnet build kommandot .

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

Byggprocessen skapar en .dacpac fil i bin\Debug-mappen i projektet som standard. I Utforskaren letar du reda på .dacpac som har skapats av byggprocessen och kopierar den till en ny mapp utanför projektkatalogen. Använd denna .dacpac fil för jämförelse för att validera din konvertering senare.

Steg 6: Kontrollera att .dacpac filerna är desamma

Du kan kontrollera att konverteringen lyckades genom att jämföra de .dacpac filer som skapats från de ursprungliga och ändrade projekten. Använd schemajämförelsefunktionerna i SQL-projekt för att visualisera skillnaderna i databasmodeller mellan de två .dacpac filerna. Alternativt kan du använda kommandoradsverktyget DacpacVerify för att jämföra de två .dacpac filerna, inklusive deras skript före och efter distribution samt projektinställningar.

Du kan installera DacpacVerify som ett dotnet-verktyg. Installera verktyget genom att köra följande kommando:

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

Syntax för DacpacVerify är att ange filvägen till två .dacpac-filer som dacpacverify <source DACPAC path> <target DACPAC path>. Om du vill jämföra de två .dacpac-filerna kör du följande kommando:

DacpacVerify original_project.dacpac modified_project.dacpac

Du kan använda verktyget för schemajämförelse för att jämföra objekt i .dacpac filerna.

Starta Visual Studio utan att ett projekt har lästs in. Gå till Verktyg>SQL Server>Ny Schemajämförelse. Välj den ursprungliga .dacpac filen som källa och den ändrade .dacpac filen som mål. Mer information om hur du använder Schemajämförelse i Visual Studio finns i använda Schemajämförelse för att jämföra olika databasdefinitioner.

Jämförelse av grafiskt schema är ännu inte tillgänglig i SQL-projekt i SDK-stil i Visual Studio. Använd Visual Studio Code för att jämföra scheman.

I Visual Studio Code installerar du SQL Server Schema Compare-tillägget om det inte redan är installerat. Starta en ny schemajämförelse från kommandopaletten genom att öppna kommandopaletten med Ctrl/Cmd+Shift+P och skriva Schema Compare.

Välj den ursprungliga .dacpac filen som källa och den ändrade .dacpac filen som mål.

Jämförelse av grafiskt schema är inte tillgängligt i SQL Server Management Studio. Använd Visual Studio Code eller Visual Studio för att jämföra scheman.

Grafisk schemajämförelse finns i Visual Studio och Visual Studio Code.

När du kör schemajämförelse ska inga resultat visas. Bristen på skillnader indikerar att de ursprungliga och ändrade projekten är likvärdiga och producerar samma databasmodell i den .dacpac filen.

Note

Jämförelsen av .dacpac filer via schema jämförelse validerar inte skript före/efter distribution, refaktoriseringslogg eller andra projektinställningar. Den validerar bara databasmodellen. Att använda kommandoradsverktyget DacpacVerify är det rekommenderade sättet att verifiera att de två .dacpac filerna är likvärdiga.