【问题标题】:How to fail application on start up如何在启动时失败应用程序
【发布时间】:2019-04-04 11:31:07
【问题描述】:

我有一个 .net 核心应用程序。如果当前配置不正确,我需要它失败它继续运行,我需要它关闭。

我的配置服务看起来像这样。必须有办法让应用程序在配置不正确时停止。

public void ConfigureServices(IServiceCollection services)
    {

        if (Configuration["settings:connectionString"] == null) return;

   }

抛出异常

不会停止应用程序,它所做的只是将其留在我的日志中

应用程序启动异常:System.ArgumentNullException: Value 不能为空。参数名称:settings:connectionString 未定义 正确地在 Xena.IdentityServer.Startup.ConfigureServices(IServiceCollection 服务)在 C:\Development\Xena\xena-identityserver\src\Xena.IdentityServer\Startup.cs:line 89 --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection 服务)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() 在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() 暴击:Microsoft.AspNetCore.Hosting.Internal.WebHost[6] 应用程序启动异常 System.ArgumentNullException:值不能为空。参数名称:settings:connectionString 不是 正确定义在 Xena.IdentityServer.Startup.ConfigureServices(IServiceCollection 服务)在 C:\Development\Xena\xena-identityserver\src\Xena.IdentityServer\Startup.cs:line 89 --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection 服务)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices() 在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

该站点仍处于打开状态,并且可以看到上面的相同页面。我需要停止应用程序。

【问题讨论】:

  • 抛出新异常?
  • 抛出异常不会停止应用程序它只是在我的日志中留下一条消息应用程序仍在运行。
  • Application.Exit();

标签: c# asp.net-core .net-core


【解决方案1】:
    public void ConfigureServices(IServiceCollection services)
    {

        if (Configuration["settings:connectionString"] == null)
        {
             // Log?
             System.Environment.Exit(160);
        }

   }

我在这里使用了160,因为 Microsoft 约定将此用于“错误参数”,但我愿意就此提出建议。

https://docs.microsoft.com/en-gb/windows/desktop/Debug/system-error-codes--0-499-

【讨论】:

  • 不错的一个!仅比我早 5 秒发布:) 另外,还有 FailFast() 方法,可以记录到系统日志。
【解决方案2】:

你为什么不能throw这样的异常

public void ConfigureServices(IServiceCollection services)
    {

        if (Configuration["settings:connectionString"] == null) 
          throw new ArgumentNullException("settings:connectionString Not defined correctly");
   }

【讨论】:

  • 抛出异常不会停止应用程序的运行。我想我应该提到我已经尝试过了。
  • @DaImTo 不,除非它在调用者的某个地方处理,否则不应该......我的意思是try .. catch
  • 您可能错过了重点。我需要停止此应用程序。抛出异常不会停止应用程序仍在运行并提供上述错误网页。
  • @DaImTo 所以你需要自定义错误页面而不是停止应用程序。
  • 顺便说一句,您可以在此处查看异常的处理方式:github.com/aspnet/Hosting/blob/release/2.0/src/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2015-04-16
  • 1970-01-01
  • 2018-12-24
  • 2012-12-15
  • 2013-11-13
  • 2017-10-07
相关资源
最近更新 更多