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

Gönderen Rick Anderson

Aşağıdaki bağlantılar sorun giderme yönergeleri sağlar:

.NET Core SDK uyarıları

.NET Core SDK'sının hem 32 bit hem de 64 bit sürümleri yüklenir

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

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

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

  • Başlangıçta .NET Core SDK yükleyicisini 32 bit bir makine kullanarak indirdiyseniz, ardından kopyalayıp 64 bit bir makineye yüklemişsinizdir.
  • 32 bit .NET Core SDK'sı başka bir uygulama tarafından yüklendi.
  • Yanlış sürüm indirildi ve yüklendi.

Bu uyarıyı önlemek için 32 bit .NET Core SDK'sını kaldırın. Denetim Masası> Programlar ve Özellikler'den> kaldırma Programı kaldırın veya değiştirin. Uyarının neden oluştuğunu ve bunun etkilerini anlarsanız, uyarıyı yoksayabilirsiniz.

.NET Core SDK'sı birden çok konuma yüklenir

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

.NET Core SDK'sı 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ışındaki bir dizinde .NET Core SDK'sının en az bir yüklemesi olduğunda bu iletiyi görürsünüz. Bu durum genellikle .NET Core SDK'sı MSI yükleyicisi yerine kopyalama/yapıştırma kullanılarak bir makineye dağıtıldığında gerçekleşir.

Bu uyarıyı önlemek 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ırma Programı kaldırın veya değiştirin. Uyarının neden oluştuğunu ve bunun etkilerini anlarsanız, uyarıyı yoksayabilirsiniz.

.NET Core SDK'ları algılanmadı

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

    .NET Core SDK'ları algılanmadı, ortam değişkenine PATHeklendiklerinden emin olun.

  • Bir dotnet komut yürütülürken uyarı şu şekilde görünür:

    Yüklü dotnet SDK'ları bulunamadı.

Ortam değişkeni PATH makinedeki .NET Core SDK'larını işaret etmediğinde bu uyarılar görüntülenir. Bu sorunu çözmek için:

  • .NET Core SDK'sını yükleyin. .NET İndirmeleri'nden en son yükleyiciyi edinin.
  • Ortam değişkeninin PATH SDK'nın yüklü olduğu konumu (C:\Program Files\dotnet\ 64 bit/x64 veya C:\Program Files (x86)\dotnet\ 32 bit/x86 için) işaret ettiğini doğrulayın. SDK yükleyicisi normalde öğesini PATHayarlar. Her zaman aynı bitlik SDK'larını ve çalışma zamanlarını aynı makineye yükleyin.

.NET Core Barındırma Paketini yükledikten sonra SDK eksik

.NET Core Barındırma Paketinin yüklenmesi, .NET Core çalışma zamanını yüklediğinde ,NET Core'unC:\Program Files (x86)\dotnet\ (x86) 32 bit (x86) sürümünü işaret edecek şekilde değiştirirPATH. Bu, 32 bit (x86) .NET Core dotnet komutu kullanıldığında (.NET Core SDK'ları algılanmadı) SDK'ların eksik olmasıyla sonuçlanabilir. Bu sorunu çözmek için üzerinde önce C:\Program Files (x86)\dotnet\PATHbir konuma geçinC:\Program Files\dotnet\.

Bir uygulamadan veri alma

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

  • İstek: Yöntem, şema, konak, yol tabanı, yol, sorgu dizesi, üst bilgiler
  • Bağlan ion: 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 yöntemin istek işleme işlem hattının Startup.Configure başına yerleştirin. Ortam, kodun yalnızca Geliştirme ortamında yürütülmesini sağlamak için ara yazılım çalıştırılana kadar denetlenmektedir.

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

  • IHostingEnvironment yöntemine Startup.Configure ekleyin ve ortamı yerel değişkenle denetleyin. 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 uygulamalarında hata ayıklama

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