如何在Web Core API中调试启动? [英] How to debug startup in Web Core API?

查看:245
本文介绍了如何在Web Core API中调试启动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用Web Core API的MVC网站. 进行较小的更改和部署后,我意外地收到了错误;响应状态代码不表示成功:500(内部服务器错误). 因此,我为Web Core API启用了日志文件(请参阅

I have an MVC website that uses a Web Core API. After making a minor change and a deployment I unexpectedly got an error; Response status code does not indicate success: 500 (Internal Server Error). So I enabled the log file for the Web Core API (see https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/troubleshoot?view=aspnetcore-2.0#aspnet-core-module-stdout-log) and I get this error message;

应用程序启动异常:System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键.在System.Collections.Generic.Dictionary2.get_Item(TKey键)处 在Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(字符串依赖) 在Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(字符串依赖) 在Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(字符串依赖) 在Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.d__4.MoveNext() 在System.Linq.Enumerable.d__172.MoveNext()在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()在Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)在Microsoft.Extensions.CoreencyM. (Property.API.Startup.ConfigureServices(IServiceCollection服务)处的(IServiceCollection服务)-从上一个引发异常的位置开始的堆栈跟踪结尾--在Microsoft.AspNetCore的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()处. Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()上Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()上的Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection服务)托管环境:暂存内容根路径:C:\ inetpub \ wwwroot \ SIR现在正在侦听: http://localhost:33007 应用程序启动.按Ctrl + C关闭.

Application startup exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. at System.Collections.Generic.Dictionary2.get_Item(TKey key) at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency) at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency) at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency) at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.d__4.MoveNext() at System.Linq.Enumerable.d__172.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services) at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services) at Properties.API.Startup.ConfigureServices(IServiceCollection services) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services) at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() Hosting environment: Staging Content root path: C:\inetpub\wwwroot\SIR Now listening on: http://localhost:33007 Application started. Press Ctrl+C to shut down.

更新: 它跌倒的那条线是;

UPDATE: The line where it is falling over is;

services.AddMvcCore().AddJsonFormatters();

services.AddMvcCore().AddJsonFormatters();

在ConfigureServices中.

in ConfigureServices.

我该如何调试它以找出导致此问题的原因?

How do I debug this to find out what is causing this?

public class Startup {
 public Startup(IHostingEnvironment env) {
  var builder = new ConfigurationBuilder()
   .SetBasePath(env.ContentRootPath)
   .AddJsonFile("appSettings.json", optional: false, reloadOnChange: true)
   .AddJsonFile($ "appSettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
   .AddEnvironmentVariables();

  Configuration = builder.Build();
 }

.
.

.
.
.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors();
        services.AddMvcCore().AddJsonFormatters();
        services.Configure<IISOptions>(options => new IISOptions
        {
            AutomaticAuthentication = true,
            ForwardClientCertificate = false,
            ForwardWindowsAuthentication = false
        });

        var connectionStringMSurveyV2 = Configuration.GetConnectionString("MSurveyV2Db");
        services.AddScoped<MSurveyV2Db>(_ => new MSurveyV2Db(connectionStringMSurveyV2));
        var connectionStringSir = Configuration.GetConnectionString("SirDb");
        services.AddScoped<SirDb>(_ => new SirDb(connectionStringSir));
        services.AddScoped<IPropertiesRepo, PropertiesRepo>();
        services.AddScoped<ISirUoW, SirUoW>();
        services.AddScoped<IPropertyUoW, PropertyUoW>();
        services.AddScoped<Services.IMailService, Services.MailService>();
    }

. . .

推荐答案

您没有说要使用哪个版本的ASP.NET Core.如果是2.0+,则可以将Program.cs中的NLog配置为在启动之前加载:

You didn't say which version of ASP.NET Core you are using. If it's 2.0+, you can configure NLog in Program.cs to load before Startup:

public static class Program
{
    public static void Main(string[] args)
    {
        var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();

        try
        {
            var config = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("hosting.json", optional: true)
                    .Build();

            BuildWebHost(args, config).Run();
        }
        catch (System.Exception ex)
        {
            logger.Error(ex, "An error occurred during program startup");
            throw;
        }
    }

    private static IWebHost BuildWebHost(string[] args, IConfigurationRoot config)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .UseNLog()
            .Build();
    }
}

这篇关于如何在Web Core API中调试启动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆