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:
- Azure App Service ve IIS'de ASP.NET Core sorunlarını giderme
- ASP.NET Core ile Azure App Service ve IIS için yaygın hataları giderme
- NDC Konferansı (Londra, 2018): ASP.NET Core Uygulamalarında sorunları tanılama
- ASP.NET Blogu: ASP.NET Temel Performans Sorunlarını Giderme
.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
PATH
eklendiklerinden 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 veyaC:\Program Files (x86)\dotnet\
32 bit/x86 için) işaret ettiğini doğrulayın. SDK yükleyicisi normalde öğesiniPATH
ayarlar. 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\
PATH
bir 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ğ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 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öntemineStartup.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.
- Linux'ta ASP Core'da hata ayıklama
- SSH üzerinden Unix üzerinde .NET Core'da hata ayıklama
- Hızlı Başlangıç: Visual Studio hata ayıklayıcısı ile ASP.NET hatalarını ayıklama
- Daha fazla hata ayıklama bilgisi için bu GitHub sorununa bakın.
ASP.NET Core