我有一个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相同。 但是,在想要隐藏启动消息方面却没有给出令人满意的答案,但仍然希望编写自己的控制台消息。
答案 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在我首先遇到错误的机器上进行了测试。