以下链接提供了故障排除指南:
在新项目对话框为 ASP.NET Core,你可能会看到以下警告:
同时安装了 .NET Core SDK 的32位和64位版本。 仅显示64位版本中安装了 "C:\Program Files\dotnet\sdk\" 的模板。
时,此警告会出现 (x86) 32 位和 64 位 (x64) 版本的.NET Core SDK安装。 这两个版本可能安装的常见原因包括:
卸载 32 位.NET Core SDK,以防止出现此警告。 从 "控制面板" > " 程序和功能" 中卸载 > 卸载或更改程序。 如果了解警告出现的原因及其含义,可以忽略此警告。
在新项目对话框为 ASP.NET Core,你可能会看到以下警告:
.NET Core SDK 安装在多个位置中。 仅显示在 "C:\Program Files\dotnet\sdk\" 上安装的 Sdk 中的模板。
外部的一个目录中有至少一个安装的.NET Core SDK 时,将显示此消息c:\Program Files\dotnet\sdk\ 。 这通常发生在使用复制/粘贴,而不 MSI 安装程序的计算机上部署了.NET Core SDK 时。
卸载所有32位 .NET Core Sdk 和运行时,以防出现此警告。 从 "控制面板" > " 程序和功能" 中卸载 > 卸载或更改程序。 如果了解警告出现的原因及其含义,可以忽略此警告。
在 ASP.NET Core 的 Visual Studio "新建项目" 对话框中,你可能会看到以下警告:
未检测到任何 .NET Core Sdk,请确保它们包含在环境变量
PATH
中。
执行 dotnet
命令时,警告显示为:
找不到任何已安装的 dotnet Sdk。
如果环境变量 PATH
不指向计算机上的任何 .NET Core Sdk,则会出现这些警告。 ИфЅвѕцґЛОКМв,ЗлЦґРРТФПВІЩЧч:
PATH
环境变量是否指向安装 SDK 的位置(对于64位/x64,则为C:\Program Files\dotnet\
,对于32位/x86 为 C:\Program Files (x86)\dotnet\
)。 SDK 安装程序通常会设置 PATH
。 始终在同一台计算机上安装相同的位数 Sdk 和运行时。安装 .net Core 托管捆绑会在安装 .net core 运行时以指向 .net core 的32位(x86)版本(C:\Program Files (x86)\dotnet\
)时修改 PATH
。 当使用32位(x86) .NET Core dotnet
命令时,这可能会导致缺少 Sdk (未检测到 .Net Core sdk)。 若要解决此问题,请将 C:\Program Files\dotnet\
移到 PATH
之前 C:\Program Files (x86)\dotnet\
的位置。
如果某个应用能够响应请求,则可以使用中间件从应用获取以下数据:
将以下中间件代码置于 Startup.Configure
方法的请求处理管道的开头。 在运行中间件之前会检查环境,以确保仅在开发环境中执行代码。
若要获取环境,请使用以下方法之一:
将 IHostingEnvironment
插入到 Startup.Configure
方法中,并检查带有本地变量的环境。 下面的示例代码演示了这种方法。
将环境分配到 Startup
类中的属性。 使用属性(例如 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 应用程序进行调试的信息。