Rozwiązywanie problemów i debugowanie projektów ASP.NET Core
Autor: Rick Anderson
Poniższe linki zawierają wskazówki dotyczące rozwiązywania problemów:
- Rozwiązywanie problemów z typowymi błędami platformy ASP.NET Core w usłudze Azure App Service i usługach IIS
- Rozwiązywanie problemów z typowymi błędami platformy ASP.NET Core w usłudze Azure App Service i usługach IIS
- NDC Conference (Londyn, 2018): Diagnozowanie problemów w ASP.NET Core Applications
- blog ASP.NET: Rozwiązywanie problemów z wydajnością podstawowego ASP.NET
Ostrzeżenia zestawu .NET Core SDK
Zainstalowane są zarówno 32-bitowe, jak i 64-bitowe wersje zestawu .NET Core SDK
W oknie dialogowym Nowy projekt dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:
Instalowane są wersje 32-bitowe i 64-bitowe zestawu .NET Core SDK. Wyświetlane są tylko szablony z 64-bitowych wersji zainstalowanych w folderze "C:\Program Files\dotnet\sdk\".
To ostrzeżenie jest wyświetlane, gdy są zainstalowane wersje 32-bitowe (x86) i 64-bitowe (x64) zestawu .NET Core SDK . Typowe przyczyny, dla których można zainstalować obie wersje, to:
- Pierwotnie pobrano instalatora zestawu SDK platformy .NET Core przy użyciu maszyny 32-bitowej, ale następnie skopiowano ją na maszynę 64-bitową i zainstalowano ją na maszynie 64-bitowej.
- 32-bitowy zestaw .NET Core SDK został zainstalowany przez inną aplikację.
- Pobrano i zainstalowano niewłaściwą wersję.
Odinstaluj 32-bitowy zestaw .NET Core SDK, aby zapobiec temu ostrzeżeniu. Odinstaluj z Panel sterowania> Programy i funkcje>Odinstaluj lub zmień program. Jeśli rozumiesz, dlaczego ostrzeżenie występuje i jego konsekwencje, możesz zignorować ostrzeżenie.
Zestaw .NET Core SDK jest instalowany w wielu lokalizacjach
W oknie dialogowym Nowy projekt dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:
Zestaw .NET Core SDK jest instalowany w wielu lokalizacjach. Wyświetlane są tylko szablony z zestawów SDK zainstalowanych w folderze "C:\Program Files\dotnet\sdk\".
Ten komunikat jest wyświetlany, gdy masz co najmniej jedną instalację zestawu .NET Core SDK w katalogu poza katalogiem C:\Program Files\dotnet\sdk\. Zwykle dzieje się tak, gdy zestaw .NET Core SDK został wdrożony na maszynie przy użyciu kopiowania/wklejania zamiast instalatora MSI.
Odinstaluj wszystkie 32-bitowe zestawy .NET Core SDK i środowiska uruchomieniowe, aby zapobiec temu ostrzeżeniu. Odinstaluj z Panel sterowania> Programy i funkcje>Odinstaluj lub zmień program. Jeśli rozumiesz, dlaczego ostrzeżenie występuje i jego konsekwencje, możesz zignorować ostrzeżenie.
Nie wykryto zestawów SDK platformy .NET Core
W oknie dialogowym Nowy projekt programu Visual Studio dla ASP.NET Core może zostać wyświetlone następujące ostrzeżenie:
Nie wykryto żadnych zestawów SDK platformy .NET Core, upewnij się, że są one uwzględnione w zmiennej środowiskowej
PATH
.Podczas wykonywania
dotnet
polecenia ostrzeżenie jest wyświetlane jako:Nie można odnaleźć zainstalowanych zestawów SDK dotnet.
Te ostrzeżenia są wyświetlane, gdy zmienna środowiskowa PATH
nie wskazuje żadnych zestawów SDK platformy .NET Core na maszynie. Aby rozwiązać ten problem:
- Zainstaluj zestaw .NET Core SDK. Uzyskaj najnowszy instalator z plików do pobrania platformy .NET.
- Sprawdź, czy zmienna
PATH
środowiskowa wskazuje lokalizację, w której zainstalowano zestaw SDK (C:\Program Files\dotnet\
dla 64-bitowego/x64 lubC:\Program Files (x86)\dotnet\
32-bitowego/x86). Instalator zestawu SDK zwykle ustawia elementPATH
. Zawsze zainstaluj te same zestawy SDK bitów i środowiska uruchomieniowe na tej samej maszynie.
Brak zestawu SDK po zainstalowaniu pakietu hostingowego platformy .NET Core
Zainstalowanie pakietu hostingu .NET Core modyfikuje PATH
środowisko uruchomieniowe platformy .NET Core w celu wskazania 32-bitowej (x86) wersji platformy .NET Core (C:\Program Files (x86)\dotnet\
). Może to spowodować brak zestawów SDK, gdy jest używane 32-bitowe (x86) polecenie .NET Core dotnet
(nie wykryto zestawów SDK platformy .NET Core). Aby rozwiązać ten problem, przejdź C:\Program Files\dotnet\
do pozycji przed C:\Program Files (x86)\dotnet\
elementem PATH
.
Uzyskiwanie danych z aplikacji
Jeśli aplikacja może odpowiadać na żądania, możesz uzyskać następujące dane z aplikacji przy użyciu oprogramowania pośredniczącego:
- Żądanie: Metoda, schemat, host, ścieżkaba, ścieżka, ciąg zapytania, nagłówki
- Połączenie: zdalny adres IP, port zdalny, lokalny adres IP, port lokalny, certyfikat klienta
- Identity: Nazwa, nazwa wyświetlana
- Ustawienia konfiguracji
- Zmienne środowiskowe
Umieść następujący kod oprogramowania pośredniczącego na początku potoku Startup.Configure
przetwarzania żądań metody. Środowisko jest sprawdzane przed uruchomieniem oprogramowania pośredniczącego, aby upewnić się, że kod jest wykonywany tylko w środowisku programistycznym.
Aby uzyskać środowisko, użyj jednej z następujących metod:
Wstrzyknąć element
IHostingEnvironment
doStartup.Configure
metody i sprawdzić środowisko za pomocą zmiennej lokalnej. Poniższy przykładowy kod demonstruje to podejście.Przypisz środowisko do właściwości w
Startup
klasie . Sprawdź środowisko przy użyciu właściwości (na przykładif (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());
});
}
}
Debugowanie aplikacji ASP.NET Core
Poniższe linki zawierają informacje na temat debugowania aplikacji ASP.NET Core.
- Debugowanie platformy ASP Core w systemie Linux
- Debugowanie platformy .NET Core w systemie Unix za pośrednictwem protokołu SSH
- Szybki start: debugowanie ASP.NET za pomocą debugera programu Visual Studio
- Zobacz ten problem z usługą GitHub, aby uzyskać więcej informacji o debugowaniu.