Bagikan melalui


Memecahkan masalah dan mendebug proyek ASP.NET Core

Oleh Rick Anderson

Tautan berikut memberikan panduan pemecahan masalah:

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 PATHlingkungan .

  • 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 atau C:\Program Files (x86)\dotnet\ untuk 32-bit/x86). Alat penginstal PATHSDK 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 dalam Startup.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.