ASP.NET Core projelerinde sorun giderme ve hata ayıklama

Gönderen Rick Anderson

Aşağıdaki bağlantılar sorun giderme kılavuzunu sağlar:

.NET Core SDK uyarılar

.NET Core SDK hem 32-bit hem de 64-bit sürümleri yüklenir

ASP.NET Core için yeni Project iletişim kutusunda, aşağıdaki uyarıyı görebilirsiniz:

.NET Core SDK hem 32-bit hem de 64-bit sürümleri yüklenir. Yalnızca ' C: \ Program Files DotNet SDK ' konumunda yüklü olan 64 bitlik sürümlerden alınan şablonlar \ \ \ görüntülenir.

Bu uyarı, .NET Core SDK hem 32-bit (x86) hem de 64-bit (x64) sürümleri yüklendiğinde görüntülenir. Her iki sürümün de sık yüklenebileceği yaygın nedenler şunlardır:

  • İlk olarak 32 bitlik bir makine kullanarak .NET Core SDK yükleyicisini indirdiniz, ancak bu dosyayı bir 64 bit makineye kopyaladınız ve bu makinede yüklediniz.
  • 32 bit .NET Core SDK başka bir uygulama tarafından yüklendi.
  • Yanlış sürüm indirildi ve yüklendi.

Bu uyarıyı engellemek için 32 bit .NET Core SDK kaldırın. Denetim Masası > Programlar ve Özellikler'den Kaldır > bir programı kaldırma veya değiştirme. Uyarının neden oluştuğunu ve etkilerini anladıysanız, uyarıyı yoksayabilirsiniz.

.NET Core SDK birden çok konuma yüklendi

ASP.NET Core için yeni Project iletişim kutusunda, aşağıdaki uyarıyı görebilirsiniz:

.NET Core SDK birden çok konuma yüklenir. Yalnızca ' C: \ Program Files DotNet SDK ' konumunda yüklü SDK 'lardan şablonlar \ \ \ görüntülenir.

C: \ Program Files \ DotNet \ SDK \ dışında bir dizinde en az bir .NET Core SDK yüklemeniz olduğunda bu iletiyi görürsünüz. Genellikle bu, .NET Core SDK MSI yükleyicisi yerine Kopyala/Yapıştır kullanılarak bir makineye dağıtıldığında meydana gelir.

Bu uyarıyı engellemek için tüm 32-bit .NET Core SDK 'larını ve çalışma zamanlarını kaldırın. Denetim Masası > Programlar ve Özellikler'den Kaldır > bir programı kaldırma veya değiştirme. Uyarının neden oluştuğunu ve etkilerini anladıysanız, uyarıyı yoksayabilirsiniz.

.NET Core SDK 'Ları algılanmadı

  • ASP.NET Core için Visual Studio yeni Project iletişim kutusunda aşağıdaki uyarıyı görebilirsiniz:

    .NET Core SDK 'Ları algılanmadı, ortam değişkenine dahil olduklarından emin olun PATH .

  • Bir komut yürütürken dotnet , uyarı şöyle görünür:

    Yüklü olan DotNet SDK 'Ları bulmak mümkün değildi.

Bu uyarılar, ortam değişkeni PATH makinede herhangi bir .NET Core SDK 'sı üzerine işaret etmez görüntülenir. Bu sorunu çözmek için:

  • .NET Core SDK 'i yükler. .Net Indirmelerindeen son yükleyiciyi edinin.
  • PATHOrtam DEĞIŞKENININ SDK 'nın yüklü olduğu konuma işaret ettiğini doğrulayın ( C:\Program Files\dotnet\ 64 bit/x64 veya C:\Program Files (x86)\dotnet\ 32 bit/x86 için). SDK yükleyicisi normalde ' i ayarlar PATH . Aynı bit genişliği SDK 'larını ve çalışma zamanlarını aynı makineye her zaman yükler.

.NET Core barındırma paketi yüklendikten sonra SDK eksik

.NET Core barındırma paketinin yüklenmesi, .net core PATH 'un 32-bit (x86) sürümünü () işaret etmek üzere .NET Core çalışma zamanını yüklerken değiştirir C:\Program Files (x86)\dotnet\ . Bu, 32-bit (x86) .NET Core dotnet komutu kullanıldığında (.NET Core SDK 'ları algılanmadığında) eksik SDK 'lara yol açabilir. Bu sorunu çözmek için, C:\Program Files\dotnet\ öncesinde bir konuma geçin C:\Program Files (x86)\dotnet\ PATH .

Uygulamadan veri alma

Bir uygulama isteklere yanıt veriyorsa, ara yazılım kullanarak uygulamadan aşağıdaki verileri alabilirsiniz:

  • İstek: Yöntem, düzen, ana bilgisayar, pathbase, yol, sorgu dizesi, üst bilgiler
  • Bağlantı: uzak IP adresi, uzak bağlantı noktası, yerel IP adresi, yerel bağlantı noktası, istemci sertifikası
  • Identity: Ad, görünen ad
  • Yapılandırma ayarları
  • Ortam değişkenleri

Aşağıdaki Ara yazılım kodunu Startup.Configure metodun istek işleme işlem hattının başına yerleştirin. Bu ortam, kodun yalnızca geliştirme ortamında yürütülmesini sağlamak için, ara yazılım çalıştırılmadan önce denetlenir.

Ortamı edinmek için aşağıdaki yaklaşımlardan birini kullanın:

  • IHostingEnvironment Startup.Configure Metodunu yöntemine ekleyin ve yerel değişkenle ortamı kontrol edin. Aşağıdaki örnek kodda bu yaklaşım gösterilmektedir.

  • Ortamı sınıfındaki bir özelliğe atayın Startup . Özelliğini kullanarak ortamı denetleyin (örneğin, if (Environment.IsDevelopment()) ).

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    IConfiguration config)
{
    if (env.IsDevelopment())
    {
        app.Run(async (context) =>
        {
            var sb = new StringBuilder();
            var nl = System.Environment.NewLine;
            var rule = string.Concat(nl, new string('-', 40), nl);
            var authSchemeProvider = app.ApplicationServices
                .GetRequiredService<IAuthenticationSchemeProvider>();

            sb.Append($"Request{rule}");
            sb.Append($"{DateTimeOffset.Now}{nl}");
            sb.Append($"{context.Request.Method} {context.Request.Path}{nl}");
            sb.Append($"Scheme: {context.Request.Scheme}{nl}");
            sb.Append($"Host: {context.Request.Headers["Host"]}{nl}");
            sb.Append($"PathBase: {context.Request.PathBase.Value}{nl}");
            sb.Append($"Path: {context.Request.Path.Value}{nl}");
            sb.Append($"Query: {context.Request.QueryString.Value}{nl}{nl}");

            sb.Append($"Connection{rule}");
            sb.Append($"RemoteIp: {context.Connection.RemoteIpAddress}{nl}");
            sb.Append($"RemotePort: {context.Connection.RemotePort}{nl}");
            sb.Append($"LocalIp: {context.Connection.LocalIpAddress}{nl}");
            sb.Append($"LocalPort: {context.Connection.LocalPort}{nl}");
            sb.Append($"ClientCert: {context.Connection.ClientCertificate}{nl}{nl}");

            sb.Append($"Identity{rule}");
            sb.Append($"User: {context.User.Identity.Name}{nl}");
            var scheme = await authSchemeProvider
                .GetSchemeAsync(IISDefaults.AuthenticationScheme);
            sb.Append($"DisplayName: {scheme?.DisplayName}{nl}{nl}");

            sb.Append($"Headers{rule}");
            foreach (var header in context.Request.Headers)
            {
                sb.Append($"{header.Key}: {header.Value}{nl}");
            }
            sb.Append(nl);

            sb.Append($"Websockets{rule}");
            if (context.Features.Get<IHttpUpgradeFeature>() != null)
            {
                sb.Append($"Status: Enabled{nl}{nl}");
            }
            else
            {
                sb.Append($"Status: Disabled{nl}{nl}");
            }

            sb.Append($"Configuration{rule}");
            foreach (var pair in config.AsEnumerable())
            {
                sb.Append($"{pair.Path}: {pair.Value}{nl}");
            }
            sb.Append(nl);

            sb.Append($"Environment Variables{rule}");
            var vars = System.Environment.GetEnvironmentVariables();
            foreach (var key in vars.Keys.Cast<string>().OrderBy(key => key, 
                StringComparer.OrdinalIgnoreCase))
            {
                var value = vars[key];
                sb.Append($"{key}: {value}{nl}");
            }

            context.Response.ContentType = "text/plain";
            await context.Response.WriteAsync(sb.ToString());
        });
    }
}

ASP.NET Core uygulamalarda hata ayıkla

aşağıdaki bağlantılar ASP.NET Core uygulamalarda hata ayıklama hakkında bilgi sağlar.