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:
- Azure App Service IIS ASP.NET Core de ASP.NET Core sorunlarını giderme
- ASP.NET Core ile Azure App Service ve IIS için ortak hatalar başvurusu
- ndc konferansı (londra, 2018): ASP.NET Core uygulamalarda sorunları tanılama
- ASP.NET Blog: sorun giderme ASP.NET Core performans sorunları
.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 veyaC:\Program Files (x86)\dotnet\32 bit/x86 için). SDK yükleyicisi normalde ' i ayarlarPATH. 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:
IHostingEnvironmentStartup.ConfigureMetodunu 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.
- Linux 'ta ASP Core hata ayıklaması
- SSH üzerinde UNIX üzerinde .NET Core hata ayıklaması
- hızlı başlangıç: Visual Studio hata ayıklayıcı ile ASP.NET hata ayıklama
- daha fazla hata ayıklama bilgisi için bu GitHub soruna bakın.