Dela via


Felsöka appar i en lokal Docker-container

Visual Studio är ett konsekvent sätt att utveckla Docker-containrar och verifiera ditt program lokalt. Du kan köra och felsöka dina appar i Linux- eller Windows-containrar som körs på ditt lokala Windows-skrivbord med Docker installerat och du behöver inte starta om containern varje gång du gör en kodändring.

Den här artikeln visar hur du använder Visual Studio för att starta en app i en lokal Docker-container, göra ändringar och sedan uppdatera webbläsaren för att se ändringarna. Den här artikeln visar också hur du anger brytpunkter för felsökning för containerbaserade appar. Projekttyper som stöds är webbappar, konsolappar och Azure-funktioner som riktar sig till .NET Framework och .NET Core. Exemplen som presenteras i den här artikeln är ett projekt av typen ASP.NET Core Web App och ett projekt av typen Konsolapp (.NET Framework).

Om du redan har ett projekt av en typ som stöds kan Visual Studio skapa en Dockerfile och konfigurera projektet så att det körs i en container. Se Container Tools i Visual Studio.

Förutsättningar

Om du vill felsöka appar i en lokal Docker-container måste följande verktyg installeras:

Om du vill köra Docker-containrar lokalt måste du ha en lokal Docker-klient. Du kan använda Docker Desktop, som kräver Windows 10 eller senare.

Skapa en webbapp

Om du har ett projekt och har lagt till Docker-stöd enligt beskrivningen i översiktkan du hoppa över det här avsnittet.

  1. I Visual Studio-startfönstret väljer du Skapa ett nytt projekt.

  2. Välj ASP.NET Core Web Appoch välj sedan Nästa.

  3. Ange ett namn för det nya programmet (eller använd standardnamnet), ange platsen på disken och välj sedan Nästa.

  4. Välj den .NET-version som du vill rikta in dig på. Om du inte är säker välja lts-versionen (långsiktig support).

    Skärmbild som visar hur du skapar ett nytt ASP.NET Core-webbappsprojekt i Visual Studio 2019.

  5. Välj om du vill ha SSL-stöd genom att markera eller avmarkera kryssrutan Konfigurera för HTTPS.

  6. Markera kryssrutan Aktivera Docker Support.

  7. Använd listrutan för att välja vilken typ av container du vill använda: Windows eller Linux-.

  8. Välj Skapa för att slutföra processen.

  1. I Visual Studio-startfönstret väljer du Skapa ett nytt projekt.

  2. Välj ASP.NET Core Web Appoch välj sedan Nästa.

  3. Ange ett namn för det nya programmet (eller använd standardnamnet), ange platsen på disken och välj sedan Nästa.

  4. Välj den .NET-version som du vill rikta in dig på. Om du inte är säker välj LTS-versionen (långsiktig support).

    Skärmbild som visar hur du skapar ett nytt ASP.NET Core-webbappsprojekt i Visual Studio 2022.

  5. Välj om du vill ha SSL-stöd genom att markera eller avmarkera kryssrutan Konfigurera för HTTPS.

  6. Markera kryssrutan Aktivera Docker.

  7. Använd listrutan Docker OS för att välja vilken typ av container du vill använda: Windows eller Linux.

  8. Välj Skapa för att slutföra processen.

Redigera dina Razor-sidor och uppdatera

Om du snabbt vill iterera ändringar på Razor-sidorna kan du starta programmet i en container. Fortsätt sedan att göra ändringar och visa dem som du skulle göra med Internet Information Services (IIS) Express.

  1. Kontrollera att Docker har konfigurerats för att använda den containertyp (Linux eller Windows) som du använder. Högerklicka på Docker-ikonen i aktivitetsfältet och välj Växla till Linux-containrar eller Växla till Windows-containrar efter behov.

  2. Att redigera koden och uppdatera den webbplats som körs enligt beskrivningen i det här avsnittet är inte aktiverat i standardmallarna i .NET Core och .NET 5 och senare. Om du vill aktivera det lägger du till NuGet-paketet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Lägg till ett anrop till tilläggsmetoden AddRazorRuntimeCompilation i koden i metoden Startup.ConfigureServices. Du behöver bara aktivera detta i FELSÖKNINGsläge, så koda det enligt följande i metoden Main:

    // Add services to the container.
    var mvcBuilder = builder.Services.AddRazorPages();
    #if DEBUG
        if (Env.IsDevelopment())
        {
            mvcBuilder.AddRazorRuntimeCompilation();
        }
    #endif
    

    Mer information finns i Razor-filkompilering i ASP.NET Core. Den exakta koden kan variera beroende på målramverket och den projektmall som du använde.

  3. Ange Lösningskonfiguration till Felsökning. Tryck sedan på Ctrl+F5 för att skapa Docker-avbildningen och köra den lokalt.

    När containeravbildningen skapas och körs i en Docker-container startar Visual Studio webbappen i din standardwebbläsare.

  4. Gå till sidan Index. Vi gör ändringar på den här sidan.

  5. Gå tillbaka till Visual Studio och öppna Index.cshtml.

  6. Lägg till följande HTML-innehåll i slutet av filen och spara sedan ändringarna.

    <h1>Hello from a Docker container!</h1>
    
  7. I utdatafönstret, när .NET-versionen är klar och du ser följande rader, växlar du tillbaka till webbläsaren och uppdaterar sidan:

    Now listening on: http://*:80
    Application started. Press Ctrl+C to shut down.
    

Dina ändringar har tillämpats!

Felsöka med brytpunkter

Ofta kräver ändringar ytterligare inspektion. Du kan använda felsökningsfunktionerna i Visual Studio för den här uppgiften.

  1. Öppna Index.cshtml.csi Visual Studio.

  2. Ersätt innehållet i metoden OnGet med följande kod:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. Till vänster om kodraden anger du en brytpunkt.

  4. Tryck på F5 för att börja felsöka och trycka på brytpunkten.

  5. Växla till Visual Studio för att visa brytpunkten. Granska värden.

    Skärmbild som visar en del av koden för Index.cshtml.cs i Visual Studio med en brytpunkt inställd till vänster om en kodrad som är markerad i gult.

    Skärmbild som visar en del av koden för Index.cshtml.cs i Visual Studio med en brytpunkt inställd till vänster om en kodrad som är markerad i gult.

Ladda om frekvent

I Visual Studio 17.10 och senare stöds även hot reload i containrar, även om du är medveten om att du i en container måste uppdatera sidan för att se ändringar. Om ändringen gäller en CSS-fil måste du uppdatera sidan igen för att se ändringarna. Observera också att uppdateringar av begränsade CSS-filer (.razor.css filer, se ASP.NET Core Blazor CSS-isolering) inte stöds som en del av snabb omladdning.

Skapa en .NET Framework-konsolapp

I det här avsnittet beskrivs hur du felsöker ett .NET Framework-konsolappprojekt i en lokal Docker-container genom att först visa hur du lägger till Docker-stöd i projektet. Det är viktigt att känna igen att olika projekttyper har olika nivåer av Docker-stöd. Det finns till och med olika nivåer av Docker-stöd för .NET Core (inklusive .NET 5 och senare) konsolappprojekt jämfört med .NET Framework-konsolappprojekt.

När ett .NET Framework-konsolappprojekt skapas finns det inget alternativ för att aktivera Docker-stöd. När du har skapat ett sådant projekt finns det inget sätt att uttryckligen lägga till Docker-stöd i projektet. För ett .NET Framework-konsolappprojekt är det möjligt att lägga till stöd för containerorkestrering. En bieffekt av att lägga till orkestreringsstöd till .NET Framework-konsolappprojektet är att det lägger till Docker-stöd i projektet.

Följande procedur visar hur du lägger till stöd för orkestrering till ett .NET Framework-konsolapp-projekt, vilket därefter lägger till Docker-stöd i projektet och möjliggör att projektet kan felsökas i en lokal Docker-behållare.

  1. Skapa ett nytt .NET Framework Console-appprojekt.
  2. Högerklicka på projektnoden i Solution Explorer och välj sedan Lägg till>stöd för containerorkestrering. I dialogrutan som visas väljer du Docker Compose. En Dockerfile läggs till i projektet och ett Docker Compose-projekt med associerade supportfiler läggs till.

Felsöka med brytpunkter

  1. Öppna Program.csi Solution Explorer.

  2. Ersätt innehållet i metoden Main med följande kod:

        System.Console.WriteLine("Hello, world!");
    
  3. Ange en brytpunkt till vänster om kodraden.

  4. Tryck på F5 för att börja felsöka och trycka på brytpunkten.

  5. Växla till Visual Studio för att visa brytpunkten och inspektera värden.

    Skärmbild av kodfönstret för Program.cs i Visual Studio med en brytpunkt inställd till vänster om en kodrad som är markerad i gult.

Autentisera till Azure-tjänster med hjälp av tokenproxyn

När du använder Azure-tjänster från en container kan du använda DefaultAzureCredential- (med VisualStudioCredential- aktiverad) för att autentisera med Azure-tjänster med ditt Microsoft Entra-konto utan någon ytterligare konfiguration i containern. Om du vill aktivera detta kan du läsa Så här konfigurerar du Visual Studio Container Tools. Du måste också konfigurera Azure-autentisering i Visual Studio genom att följa anvisningarna i Authenticate Visual Studio with Azure. Stödet för VisualStudioCredential i en container finns i Visual Studio version 17.6 och senare.

Azure Functions

Om du felsöker ett integrerat Azure Functions-projekt och använder tokenproxyn i containern för att hantera autentisering till Azure-tjänster måste du kopiera .NET-körningen till containern för att tokenproxyn ska köras. Om du felsöker ett isolerat Azure Functions-projekt har det redan .NET-körningen, så det finns inget behov av det här extra steget.

För att säkerställa att .NET-körningen är tillgänglig för tokenproxyn lägger du till eller ändrar det debug lagret i Dockerfile som kopierar .NET-körningen till containeravbildningen. För Linux-containrar kan du lägga till följande kod i Dockerfile:

# This layer is to support debugging, VS's Token Proxy requires the runtime to be installed in the container
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS runtime
FROM base as debug
COPY --from=runtime /usr/share/dotnet /usr/share/dotnet
RUN ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

I Visual Studio-projektet måste du också göra några ändringar för att ange detta som det lager som ska användas vid felsökning i snabbt läge. En förklaring av snabbt läge finns i Anpassa Docker-containrar i Visual Studio. För scenarier med en enskild container (inte Docker Compose) anger du egenskapen MSBuild DockerfileFastModeStage till debug för att kunna använda det lagret för felsökning. För Docker Compose ändrar du docker-compose.vs.debug.yml enligt följande:

# Set the stage to debug to use an image with the .NET runtime in it
services:
  functionappintegrated:
    build:
      target: debug

Ett kodexempel på autentisering med Azure Functions, inklusive både integrerade och isolerade scenarier, finns i VisualStudioCredentialExample.

Återanvändning av container

När du använder snabbläge, som Visual Studio normalt använder för felsökningskonfigurationen, återskapar Visual Studio endast containeravbildningarna och själva containern när du ändrar Dockerfile. Om du inte ändrar Dockerfile återanvänder Visual Studio containern från en tidigare körning.

Om du har ändrat containern manuellt och vill starta om med en ren containeravbildning använder du kommandot Build>Clean i Visual Studio och skapar sedan som vanligt.

När du inte använder snabbläge, vilket är typiskt för versionskonfigurationen, återskapar Visual Studio containern varje gång projektet skapas.

Du kan konfigurera när snabbt läge används; Se Hur man konfigurerar Visual Studio Container Tools.

Felsöka

Lär dig hur du felsöker i Visual Studio Docker-utveckling.

Få mer information genom att läsa Hur Visual Studio skapar containerbaserade appar.

Mer om Docker med Visual Studio, Windows och Azure