Yerel Docker kapsayıcısında uygulamalarda hata ayıklama

Visual Studio, Docker kapsayıcıları geliştirmek ve uygulamanızı yerel olarak doğrulamak için tutarlı bir yol sağlar. Docker yüklü olarak yerel Windows masaüstünüzde çalışan Linux veya Windows kapsayıcılarında uygulamalarınızı çalıştırabilir ve hatalarını ayıklayabilirsiniz ve her kod değişikliği yaptığınızda kapsayıcıyı yeniden başlatmanız gerekmez.

Bu makalede visual studio kullanarak yerel docker kapsayıcısında uygulama başlatma, değişiklik yapma ve ardından değişiklikleri görmek için tarayıcıyı yenileme işlemleri gösterilmektedir. Bu makalede, kapsayıcılı uygulamalar için hata ayıklama için kesme noktalarının nasıl ayarlanacağı da gösterilir. Desteklenen proje türleri arasında web uygulaması, konsol uygulaması ve .NET Framework ile .NET Core'un hedeflendiği Azure işlevi bulunur. Bu makalede sunulan örnekler, ASP.NET Core Web App türünde bir proje ve Konsol Uygulaması (.NET Framework) türünde bir projedir.

Desteklenen türde bir projeniz zaten varsa, Visual Studio bir Dockerfile oluşturabilir ve projenizi bir kapsayıcıda çalışacak şekilde yapılandırabilir. Bkz. Visual Studio'da Kapsayıcı Araçları.

Önkoşullar

Yerel Docker kapsayıcısında uygulamaların hatalarını ayıklamak için aşağıdaki araçların yüklenmesi gerekir:

Docker kapsayıcılarını yerel olarak çalıştırmak için yerel bir Docker istemciniz olmalıdır. Windows 10 veya üzerini gerektiren Docker Desktop'ı kullanabilirsiniz.

Web uygulaması oluşturma

Bir projeniz varsa ve genel bakış bölümünde açıklandığı gibi Docker desteği eklediyseniz bu bölümü atlayın.

  1. Visual Studio başlangıç penceresinde Yeni proje oluştur'u seçin.

  2. ASP.NET Core Web App'i ve ardından İleri'yi seçin.

  3. Yeni uygulamanız için bir ad girin (veya varsayılan adı kullanın), disk üzerindeki konumu belirtin ve ardından İleri'yi seçin.

  4. Hedeflemek istediğiniz .NET sürümünü seçin. Emin değilseniz LTS (uzun vadeli destek) sürümünü seçin.

    Visual Studio 2019'da yeni bir ASP.NET Core web uygulaması projesinin nasıl oluşturulacağını gösteren ekran görüntüsü.

  5. HTTPS için yapılandır onay kutusunu seçerek veya temizleyerek SSL desteği isteyip istemediğinizi seçin.

  6. Docker Desteğini Etkinleştir onay kutusunu seçin.

  7. İstediğiniz kapsayıcı türünü seçmek için açılan listeyi kullanın: Windows veya Linux.

  8. İşlemi tamamlamak için Oluştur'u seçin.

  1. Visual Studio başlangıç penceresinde Yeni proje oluştur'u seçin.

  2. ASP.NET Core Web App'i ve ardından İleri'yi seçin.

  3. Yeni uygulamanız için bir ad girin (veya varsayılan adı kullanın), disk üzerindeki konumu belirtin ve ardından İleri'yi seçin.

  4. Hedeflemek istediğiniz .NET sürümünü seçin. Emin değilseniz LTS (uzun vadeli destek) sürümünü seçin.

    Visual Studio 2022'de yeni bir ASP.NET Core web uygulaması projesinin nasıl oluşturulacağını gösteren ekran görüntüsü.

  5. HTTPS için yapılandır onay kutusunu seçerek veya temizleyerek SSL desteği isteyip istemediğinizi seçin.

  6. Docker'ı Etkinleştir onay kutusunu seçin.

  7. docker işletim sistemi açılan listesini kullanarak istediğiniz kapsayıcı türünü seçin: Windows veya Linux.

  8. İşlemi tamamlamak için Oluştur'u seçin.

Razor sayfalarınızı düzenleme ve yenileme

Razor sayfalarınızdaki değişiklikleri hızla yinelemek için uygulamanızı bir kapsayıcıda başlatabilirsiniz. Ardından, internet Information Services (IIS) Express ile yaptığınız gibi değişiklikleri yapmaya devam edin.

  1. Docker'ın, kullanmakta olduğunuz kapsayıcı türünü (Linux veya Windows) kullanacak şekilde ayarlandığından emin olun. Görev Çubuğunda Docker simgesine sağ tıklayın ve Linux kapsayıcılarına geç'i veya Uygun şekilde Windows kapsayıcılarına geçiş yap'ı seçin.

  2. Bu bölümde açıklandığı gibi kodunuzu düzenleme ve çalışan siteyi yenileme, .NET Core ve .NET 5 ve sonraki sürümlerdeki varsayılan şablonlarda etkinleştirilmez. Etkinleştirmek için Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet paketini ekleyin. Yöntemindeki koda Startup.ConfigureServices AddRazorRuntimeCompilation uzantı yöntemine bir çağrı ekleyin. Bunun yalnızca HATA AYıKLAMA modunda etkinleştirilmesi gerekir, bu nedenle yönteminde aşağıdaki gibi kodlayın Main :

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

    Daha fazla bilgi için bkz . ASP.NET Core'da Razor dosya derlemesi. Tam kod, hedef çerçeveye ve kullandığınız proje şablonuna bağlı olarak değişebilir.

  3. Çözüm Yapılandırmasını Hata Ayıklama olarak ayarlayın. Ardından Docker görüntünüzü oluşturmak ve yerel olarak çalıştırmak için Ctrl+F5 tuşlarına basın.

    Kapsayıcı görüntüsü bir Docker kapsayıcısında derlenip çalıştırıldığında, Visual Studio web uygulamasını varsayılan tarayıcınızda başlatır.

  4. Dizin sayfasına gidin. Bu sayfada değişiklikler yapacağız.

  5. Visual Studio'ya dönün ve Index.cshtml dosyasını açın.

  6. Dosyanın sonuna aşağıdaki HTML içeriğini ekleyin ve değişiklikleri kaydedin.

    <h1>Hello from a Docker container!</h1>
    
  7. Çıkış penceresinde, .NET derlemesi tamamlandığında ve aşağıdaki satırları gördüğünüzde tarayıcınıza dönün ve sayfayı yenileyin:

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

Değişiklikleriniz uygulandı!

Kesme noktalarıyla hata ayıklama

Değişiklikler genellikle daha fazla inceleme gerektirir. Bu görev için Visual Studio'nun hata ayıklama özelliklerini kullanabilirsiniz.

  1. Visual Studio'da Index.cshtml.cs açın.

  2. OnGet yönteminin içeriğini aşağıdaki kodla değiştirin:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. Kod satırının solunda bir kesme noktası ayarlayın.

  4. Hata ayıklamayı başlatmak ve kesme noktasına gitmek için F5 tuşuna basın.

  5. Kesme noktasını görüntülemek için Visual Studio'ya geçin. Değerleri inceleyin.

    Visual Studio'da Index.cshtml.cs kodunun bir kısmını gösteren ve sarı renkle vurgulanmış bir kod satırının solunda bir kesme noktası ayarlanmış olan ekran görüntüsü.

    Visual Studio'da Index.cshtml.cs kodunun bir kısmını gösteren ve sarı renkle vurgulanmış bir kod satırının solunda bir kesme noktası ayarlanmış olan ekran görüntüsü.

Çalışırken yeniden yükleme

Ayrıca Visual Studio 17.10 ve sonraki sürümlerde kapsayıcılarda Çalışırken Yeniden Yükleme desteklenir, ancak kapsayıcıda değişiklikleri görmek için sayfayı yenilemeniz gerektiğini unutmayın. Değişiklik bir CSS dosyasındaysa, bu değişiklikleri görmek için sayfayı yeniden yenilemeniz gerekir. Ayrıca kapsamı belirlenmiş CSS dosyalarına (.razor.css dosyalar, bkz . ASP.NET Core Blazor CSS yalıtımı) güncelleştirmelerinin sık erişimli yeniden yükleme kapsamında desteklenmediğini unutmayın.

.NET Framework konsol uygulaması oluşturma

Bu bölümde, yerel bir Docker kapsayıcısında bir .NET Framework konsol uygulaması projesinde hata ayıklama işlemi yapılırken önce projeye Docker desteğinin nasıl ekleneceği gösterilir. Farklı proje türlerinin farklı Docker desteği düzeylerine sahip olduğunu bilmek önemlidir. .NET Core (.NET 5 ve üzeri dahil) konsol uygulaması projeleri ve .NET Framework konsol uygulaması projeleri için farklı Docker desteği düzeyleri bile vardır.

.NET Framework konsol uygulaması projesi oluşturulduğunda Docker desteğini etkinleştirme seçeneği yoktur. Böyle bir proje oluşturduktan sonra, docker desteğini projeye açıkça eklemenin bir yolu yoktur. .NET Framework konsol uygulaması projesi için kapsayıcı düzenleme desteği eklemek mümkündür. .NET Framework konsol uygulaması projesine düzenleme desteği eklemenin bir yan etkisi, projeye Docker desteği eklemesidir.

Aşağıdaki yordam, daha sonra projeye Docker desteği ekleyen ve projenin yerel bir Docker kapsayıcısında hata ayıklamasına izin veren bir .NET Framework konsol uygulaması projesine düzenleme desteği eklemeyi gösterir.

  1. Yeni bir .NET Framework Konsol uygulaması projesi oluşturun.
  2. Çözüm Gezgini proje düğümüne sağ tıklayın ve kapsayıcı düzenleme desteği ekle'yi>seçin. Görüntülenen iletişim kutusunda Docker Compose'u seçin. Projenize bir Dockerfile ve ilişkili destek dosyaları içeren bir Docker Compose projesi eklenir.

Kesme noktalarıyla hata ayıklama

  1. Çözüm Gezgini'da Program.cs açın.

  2. Main yönteminin içeriğini aşağıdaki kodla değiştirin:

        System.Console.WriteLine("Hello, world!");
    
  3. Kod satırının solunda bir kesme noktası ayarlayın.

  4. Hata ayıklamayı başlatmak için F5 tuşuna basın ve kesme noktasına basın.

  5. Kesme noktasını görüntülemek ve değerleri incelemek için Visual Studio'ya geçin.

    Visual Studio'da Program.cs için kod penceresinin ekran görüntüsü ve sarı renkle vurgulanmış bir kod satırının solunda bir kesme noktası ayarlanmış.

Belirteç ara sunucusunu kullanarak Azure hizmetlerinde kimlik doğrulaması

Kapsayıcıdan Azure hizmetlerini kullanırken, Kapsayıcıda ek yapılandırma olmadan Microsoft Entra hesabınızla Azure hizmetlerinde kimlik doğrulaması yapmak için DefaultAzureCredential 'ı (VisualStudioCredential etkinken) kullanabilirsiniz. Bunu etkinleştirmek için bkz . Visual Studio Kapsayıcı Araçları'nı yapılandırma. Ayrıca, Visual Studio'da Azure kimlik doğrulamasını ayarlamak için Azure ile Visual Studio'da kimlik doğrulama yönergelerini uygulamanız gerekir. Kapsayıcıdaki VisualStudioCredential desteği Visual Studio sürüm 17.6 ve sonraki sürümlerde kullanılabilir.

Azure İşlevleri

Tümleşik bir Azure İşlevleri projesinde hata ayıklayıp Azure hizmetlerinde kimlik doğrulamasını işlemek için kapsayıcıdaki belirteç ara sunucusunu kullanıyorsanız, belirteç ara sunucusunun çalışması için .NET çalışma zamanını kapsayıcıya kopyalamanız gerekir. Yalıtılmış bir Azure İşlevleri projesinde hata ayıklarken zaten .NET çalışma zamanı vardır, bu nedenle bu ek adıma gerek yoktur.

.NET çalışma zamanının belirteç ara sunucusu tarafından kullanılabildiğinden emin olmak için Dockerfile'da .NET çalışma zamanını kapsayıcı görüntüsüne kopyalayan katmanı ekleyin veya değiştirin debug . Linux kapsayıcıları için Dockerfile dosyasına aşağıdaki kodu ekleyebilirsiniz:

# 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

Ayrıca, Visual Studio projesinde, hızlı modda hata ayıklarken kullanılacak katman olarak bunu belirtmek için bazı değişiklikler yapmanız gerekir. Hızlı Modun açıklaması için bkz . Visual Studio'da Docker kapsayıcılarını özelleştirme. Tek kapsayıcı senaryoları için (Docker Compose değil), hata ayıklama için bu katmanı kullanmak üzere MSBuild özelliğini DockerfileFastModeStage debug olarak ayarlayın. Docker Compose için öğesini docker-compose.vs.debug.yml aşağıdaki gibi değiştirin:

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

Hem tümleşik hem de yalıtılmış senaryolar dahil olmak üzere Azure İşlevleri kimlik doğrulaması kod örneği için bkz. VisualStudioCredentialExample.

Kapsayıcı yeniden kullanımı

Visual Studio'nun normalde Hata Ayıklama yapılandırması için kullandığı Hızlı Modu kullandığınızda, Dockerfile'ı değiştirdiğinizde Visual Studio yalnızca kapsayıcı görüntülerinizi ve kapsayıcının kendisini yeniden oluşturur. Dockerfile'ı değiştirmezseniz, Visual Studio önceki bir çalıştırmadan kapsayıcıyı yeniden kullanır.

Kapsayıcınızı el ile değiştirdiyseniz ve temiz bir kapsayıcı görüntüsüyle yeniden başlatmak istiyorsanız Visual Studio'da Temiz Derle>komutunu kullanın ve normal şekilde derleyin.

Yayın yapılandırması için tipik olan Hızlı Modu kullanmadığınızda Visual Studio, proje her oluşturulduğunda kapsayıcıyı yeniden oluşturur.

Hızlı Mod kullanıldığında yapılandırabilirsiniz; Bkz. Visual Studio Kapsayıcı Araçları'nı yapılandırma.

Sorun giderme

Visual Studio Docker geliştirme sorunlarını gidermeyi öğrenin.

Visual Studio kapsayıcılı uygulamaları nasıl derler? bölümünü okuyarak daha fazla ayrıntıya ulaşın.

Visual Studio, Windows ve Azure ile Docker hakkında daha fazla bilgi