Problembehandlung und Debuggen von ASP.NET Core-Projekten
Von Rick Anderson
Die folgenden Links bieten Hinweise zur Problembehandlung:
- Problembehandlung bei ASP.NET Core in Azure App Service und IIS
- Problembehandlung für häufige Fehler bei Azure App Service und IIS mit ASP.NET Core
- NDC Conference (London, 2018): Diagnostizieren von Problemen in ASP.NET Core-Anwendungen
- ASP.NET-Blog: Problembehandlung bei ASP. NET Core-Leistungsproblemen
.NET Core SDK-Warnungen
Sowohl die 32-Bit- als auch die 64-Bit-Version des .NET Core SDKs sind installiert.
Im Dialogfeld Neues Projekt für ASP.NET Core wird möglicherweise die folgende Warnung angezeigt:
Sowohl 32-Bit- als auch 64-Bit-Versionen des .NET Core SDKs sind installiert. Es werden nur Vorlagen der 64-Bit-Versionen angezeigt, die unter „C:\Programme\dotnet\sdk\“ installiert sind.
Diese Warnung wird angezeigt, wenn sowohl 32-Bit- (x86) als auch 64-Bit-Versionen (x64) des .NET Core SDKs installiert sind. Häufige Gründe für die Installation beider Versionen sind unter anderem:
- Sie haben das .NET Core SDK-Installationsprogramm ursprünglich mit einem 32-Bit-Computer heruntergeladen, es dann aber auf einen 64-Bit-Computer kopiert und installiert.
- Die 32-Bit-Version des .NET Core SDKs wurde von einer anderen Anwendung installiert.
- Die falsche Version wurde heruntergeladen und installiert.
Deinstallieren Sie die 32-Bit-Version des .NET Core SDKs, um diese Warnung zu verhindern. Deinstallieren Sie über Systemsteuerung>Programme und Features>Programm deinstallieren oder ändern. Wenn Sie verstehen, warum die Warnung und ihre Auswirkungen auftreten, können Sie die Warnung ignorieren.
Das .NET Core SDK ist an mehreren Speicherorten installiert.
Im Dialogfeld Neues Projekt für ASP.NET Core wird möglicherweise die folgende Warnung angezeigt:
Das .NET Core SDK ist an mehreren Speicherorten installiert. Es werden nur Vorlagen der SDKs angezeigt, die unter „C:\Programme\dotnet\sdk\“ installiert sind.
Diese Meldung wird angezeigt, wenn Sie über mindestens eine Installation des .NET Core SDK in einem Verzeichnis außerhalb von C:\Programme\dotnet\sdk\ verfügen. Normalerweise geschieht dies, wenn das .NET Core SDKs auf einem Computer über Kopieren/Einfügen anstatt mit dem MSI-Installationsprogramm bereitgestellt wurde.
Deinstallieren Sie alle 32-Bit-Versionen des .NET Core SDKs und der Laufzeiten, um diese Warnung zu verhindern. Deinstallieren Sie über Systemsteuerung>Programme und Features>Programm deinstallieren oder ändern. Wenn Sie verstehen, warum die Warnung und ihre Auswirkungen auftreten, können Sie die Warnung ignorieren.
Es wurden keine .NET Core SDKs erkannt.
Im Dialogfeld Neues Projekt in Visual Studio für ASP.NET Core wird möglicherweise die folgende Warnung angezeigt:
Es wurden keine .NET Core SDKs erkannt. Stellen Sie sicher, dass sie in der Umgebungsvariablen
PATH
enthalten sind.Wenn Sie einen
dotnet
-Befehl ausführen, wird die Meldung wie folgt angezeigt:Es konnten keine installierten Dotnet-SDKs gefunden werden.
Diese Warnungen werden angezeigt, wenn die Umgebungsvariable PATH
nicht auf . NET Core SDKs auf dem Computer verweist. Dieses Problem lässt sich wie folgt beheben:
- Installieren Sie das .NET Core-SDK. Das aktuellste Installationsprogramm erhalten Sie unter .NET-Downloads.
- Stellen Sie sicher, dass die Umgebungsvariable
PATH
auf den Speicherort verweist, an dem das SDK installiert ist (C:\Program Files\dotnet\
für 64-Bit/x64 oderC:\Program Files (x86)\dotnet\
für 32-Bit/x86). Das SDK-Installationsprogramm legt normalerweise denPATH
fest. Installieren Sie immer SDKs und Laufzeiten mit derselben Bitanzahl auf demselben Computer.
Fehlendes SDK nach der Installation des .NET Core-Hostingpakets
Durch die Installation des .NET Core-Hostingpakets wird der PATH
bei der Installation der .NET Core-Laufzeit so geändert, dass er auf die 32-Bit-Version (x86) von .NET Core (C:\Program Files (x86)\dotnet\
) verweist. Dies kann zu fehlenden SDKs führen, wenn der 32-Bit (x86) .NET Core-Befehl dotnet
verwendet wird (Es wurden keine .NET Core SDKs erkannt). Um dieses Problem zu beheben, verschieben Sie C:\Program Files\dotnet\
an einen Speicherort vor C:\Program Files (x86)\dotnet\
in dem PATH
.
Abrufen von Daten aus einer App
Wenn eine App in der Lage ist, auf Anforderungen zu antworten, können Sie die folgenden Daten über eine Middleware aus der App erhalten:
- Anforderung: Methode, Schema, Host, Pfadbasis, Pfad, Abfragezeichenfolge, Header
- Verbindung: Remote-IP-Adresse, Remoteport, lokale IP-Adresse, lokaler Port, Clientzertifikat
- Identity: Name, Anzeigename
- Konfigurationseinstellungen
- Umgebungsvariablen
Platzieren Sie den folgenden Middleware-Code an den Anfang der Anforderungsverarbeitungspipeline der Startup.Configure
-Methode. Die Umgebung wird vor der Ausführung der Middleware überprüft, um sicherzustellen, dass der Code nur in der Entwicklungsumgebung ausgeführt wird.
Um die Umgebung zu erhalten, verwenden Sie einen der folgenden Ansätze:
Fügen Sie die
IHostingEnvironment
in dieStartup.Configure
-Methode ein, und prüfen Sie die Umgebung mit der lokalen Variablen. Dieser Ansatz wird im folgenden Beispielcode veranschaulicht.Weisen Sie die Umgebung einer Eigenschaft der Klasse
Startup
zu. Überprüfen Sie die Umgebung mithilfe der Eigenschaft (z. B.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());
});
}
}
Debuggen von ASP.NET Core-Apps
Die folgenden Links bieten Informationen zum Debuggen von ASP.NET Core-Apps.
- Debuggen von ASP Core unter Linux
- Debuggen von .NET Core unter UNIX über SSH
- Schnellstart: Debuggen von ASP.NET mithilfe des Visual Studio-Debuggers
- Weitere Informationen zum Debuggen finden Sie in diesem GitHub-Problem.