Memecahkan masalah dan mendebug proyek ASP.NET Core
Oleh Rick Anderson
Tautan berikut memberikan panduan pemecahan masalah:
- Memecahkan masalah ASP.NET Core pada Azure App Service dan IIS
- Pemecahan masalah kesalahan umum untuk Azure App Service dan IIS dengan ASP.NET Core
- Konferensi NDC (London, 2018): Mendiagnosis masalah dalam aplikasi inti ASP.NET
- Blog ASP.NET: Pemecahan Masalah Performa Inti ASP.NET
Peringatan .NET Core SDK
Versi 32-bit dan 64-bit dari .NET Core SDK diinstal
Dalam dialog Proyek Baru untuk ASP.NET Core, Anda mungkin melihat peringatan berikut:
Versi 32-bit dan 64-bit dari .NET Core SDK diinstal. Hanya templat dari versi 64-bit yang diinstal di 'C:\Program Files\dotnet\sdk\' yang ditampilkan.
Peringatan ini muncul ketika versi 32-bit (x86) dan 64-bit (x64) dari .NET Core SDK diinstal. Alasan umum kedua versi dapat diinstal meliputi:
- Anda awalnya mengunduh penginstal .NET Core SDK menggunakan mesin 32-bit tetapi kemudian menyalinnya di seluruh dan menginstalnya pada komputer 64-bit.
- .NET Core SDK 32-bit diinstal oleh aplikasi lain.
- Versi yang salah diunduh dan diinstal.
Hapus instalan .NET Core SDK 32-bit untuk mencegah peringatan ini. Hapus instalan dari Panel Kontrol> Program dan Fitur>Hapus instalan atau ubah program. Jika Anda memahami mengapa peringatan terjadi dan implikasinya, Anda dapat mengabaikan peringatan.
.NET Core SDK diinstal di beberapa lokasi
Dalam dialog Proyek Baru untuk ASP.NET Core, Anda mungkin melihat peringatan berikut:
.NET Core SDK diinstal di beberapa lokasi. Hanya templat dari SDK yang diinstal di 'C:\Program Files\dotnet\sdk\' yang ditampilkan.
Anda melihat pesan ini ketika Anda memiliki setidaknya satu penginstalan .NET Core SDK dalam direktori di luar C:\Program Files\dotnet\sdk\. Biasanya ini terjadi ketika .NET Core SDK telah disebarkan pada komputer menggunakan salin/tempel alih-alih alat penginstal MSI.
Hapus instalan semua .NET Core SDK dan runtime 32-bit untuk mencegah peringatan ini. Hapus instalan dari Panel Kontrol> Program dan Fitur>Hapus instalan atau ubah program. Jika Anda memahami mengapa peringatan terjadi dan implikasinya, Anda dapat mengabaikan peringatan.
Tidak ada .NET Core SDK yang terdeteksi
Dalam dialog Proyek Baru Visual Studio untuk ASP.NET Core, Anda mungkin melihat peringatan berikut:
Tidak ada .NET Core SDK yang terdeteksi, pastikan SDK tersebut disertakan dalam variabel
PATH
lingkungan .Saat menjalankan
dotnet
perintah, peringatan muncul sebagai:Tidak dimungkinkan untuk menemukan SDK dotnet yang diinstal.
Peringatan ini muncul ketika variabel PATH
lingkungan tidak menunjuk ke .NET Core SDK apa pun pada komputer. Untuk mengatasi masalah ini:
- Memasang .NET Core SDK. Dapatkan penginstal terbaru dari Unduhan .NET.
- Verifikasi bahwa
PATH
variabel lingkungan menunjuk ke lokasi tempat SDK diinstal (C:\Program Files\dotnet\
untuk 64-bit/x64 atauC:\Program Files (x86)\dotnet\
untuk 32-bit/x86). Alat penginstalPATH
SDK biasanya mengatur . Selalu instal SDK bitness dan runtime yang sama pada komputer yang sama.
SDK hilang setelah menginstal Bundel Hosting .NET Core
Menginstal .NET Core Hosting Bundle memodifikasi PATH
ketika menginstal runtime .NET Core untuk menunjuk ke versi 32-bit (x86) dari .NET Core (C:\Program Files (x86)\dotnet\
). Ini dapat mengakibatkan SDK yang hilang ketika perintah .NET Core dotnet
32-bit (x86) digunakan (Tidak ada .NET Core SDK yang terdeteksi). Untuk mengatasi masalah ini, pindah C:\Program Files\dotnet\
ke posisi sebelumnya C:\Program Files (x86)\dotnet\
pada PATH
.
Mendapatkan data dari aplikasi
Jika aplikasi mampu menanggapi permintaan, Anda dapat memperoleh data berikut dari aplikasi menggunakan middleware:
- Permintaan: Metode, skema, host, pathbase, jalur, string kueri, header
- Koneksi: Alamat IP jarak jauh, port jarak jauh, alamat IP lokal, port lokal, sertifikat klien
- Identity: Nama, nama tampilan
- Pengaturan konfigurasi
- Variabel lingkungan
Tempatkan kode middleware berikut di awal Startup.Configure
alur pemrosesan permintaan metode. Lingkungan diperiksa sebelum middleware dijalankan untuk memastikan bahwa kode hanya dijalankan di lingkungan Pengembangan.
Untuk mendapatkan lingkungan, gunakan salah satu pendekatan berikut:
Masukkan ke
IHostingEnvironment
dalamStartup.Configure
metode dan periksa lingkungan dengan variabel lokal. Kode sampel berikut menunjukkan pendekatan ini.Tetapkan lingkungan ke properti di
Startup
kelas . Periksa lingkungan menggunakan properti (misalnya,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());
});
}
}
Men-debug aplikasi ASP.NET Core
Tautan berikut ini menyediakan informasi tentang penelusuran kesalahan ASP.NET aplikasi Core.
- Penelusuran kesalahan ASP Core di Linux
- Penelusuran kesalahan .NET Core di Unix melalui SSH
- Mulai cepat: Debug ASP.NET dengan debugger Visual Studio
- Lihat masalah GitHub ini untuk informasi penelusuran kesalahan selengkapnya.
ASP.NET Core