隐藏ASP.NET Core WebHost消息

时间:2017-11-23 15:18:39

标签: c# asp.net-core

我有一个ASP.NET Core应用程序,我想隐藏启动应用程序时显示的控制台行(因为我有自己的欢迎消息)

Hosting environment: Development
Content root path: path\to\my\executable
Now listening on: http://localhost:portnumber
Application started. Press Ctrl+C to shut down.

我尝试了一个解决方案,我将Console.Out设置为空流,然后在我想写东西时将其设置回来。它适用于我的开发PC,但我已经看到问题出现在其他PC上。

    Console.Write(WelcomeMessage);
    ConsOut = Console.Out;  //Save the reference to the old out value (The terminal)
        Console.SetOut(new StreamWriter(Stream.Null));  //Hack out the console
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseUrls(url)
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();
        host.Run();

我对这个解决方案不满意,因为它似乎是一个黑客攻击,并且不能持续工作。

How to turn off the logging done by the ASP.NET core framework开始,我发现你可以在Startup.cs类的Configure()方法中禁用自动日志系统,所以我相信它与我正在寻找的类似,我只是不知道如何删除托管消息。

编辑:我注意到我的问题与Asp.Net Core API disable startup complete message相同。 但是,在想要隐藏启动消息方面却没有给出令人满意的答案,但仍然希望编写自己的控制台消息。

1 个答案:

答案 0 :(得分:1)

我发现this answer也可以解决我的问题。 我的方法最终看起来像这样:

    //list3 created.
    for(HashMap<String,String> hm2:list2){
        String nameValue=hm2.get("name");
        for(HashMap<String,String> hm1:list1){
            if(hm1.get("name").equalsIgnoreCase(nameValue)){
                HashMap<String,String> tempMap = new HashMap();
                tempMap.put("name",nameValue);
                tempMap.put("count",hm1.get("count"));
                tempMap.put("change",hm2.get("change"));
                list3.add(tempMap);
                break;
            }
        }

    }
    System.out.println(list3);

OnConsoleCancelKeyPress方法如下所示:

     Console.Write(WelcomeMessage);
        ConsOut = Console.Out;  //Save the reference to the old out value (The terminal)
        Console.SetOut(new StreamWriter(Stream.Null));  //Remove the console output
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseUrls(url)
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();
        host.Start();   //Start the host in a non-blocking way
        Console.SetOut(ConsOut);    //Put the console output back, after the messages has been written
        Console.CancelKeyPress += OnConsoleCancelKeyPress;
        var waitHandles = new WaitHandle[] {
            CancelTokenSource.Token.WaitHandle
        };
        WaitHandle.WaitAll(waitHandles);    //Wait until the cancel signal has been received

由于Start()是一个非阻塞调用,当WebHost启动时返回,我可以确保在启动WebHost时输出的消息已经被写入了,并且它们不会再打扰我的用户了(I在我首先遇到错误的机器上进行了测试。