是否可以在不显示控制台窗口的情况下运行.NET Core控制台应用程序?
在这个问题中,原因是作者想要在运行.NET Core控制台应用程序时隐藏控制台窗口,但是找不到editbin.exe。作者发现了另一种方法,通过NuGet上的NSubsys来实现隐藏窗口。
解决方法是在发布应用程序时将其设置为隐藏模式。需要注意的是,从NuGet中复制Npm install命令,因为在解决方案的软件包管理器中搜索结果为空。
作者询问是否能够提供使用NSubsys的具体步骤。安装了NuGet包后,还需要采取哪些其他步骤?同时,作者问NSubsys是否只会在本地开发时触发,只有在应用程序作为自包含包发布后才会触发。
为了解决这个问题,首先需要在发布应用程序时将其设置为隐藏模式。然后,通过NuGet安装NSubsys。最后,在需要隐藏窗口的代码中使用NSubsys库。
以下是使用NSubsys的示例代码:
using System; using System.Diagnostics; using NSubsys; class Program { static void Main(string[] args) { // Hide console window Subsystem.Run(() => { Console.WriteLine("Hello World!"); Console.ReadLine(); }); } }
这样,当运行这个应用程序时,控制台窗口将被隐藏起来。需要注意的是,NSubsys只在发布应用程序时才会触发,本地开发时不会生效。
在.NET Core 3.0之前,无法直接在.NET Core控制台应用程序中隐藏控制台窗口,因为Windows EXE文件在启动应用程序之前会评估一个标志,指示它是“控制台”还是“GUI”应用程序。但是,可以使用editbin.exe(我知道它随着Visual Studio的C++构建工具一起提供)来更改此标志。
为了实现这一点,可以创建一个自包含的.NET Core应用程序,从project.json中删除"type": "platform",并添加一个runtimes部分,以便项目输出包括一个实际的.exe文件。然后可以添加一个后期构建脚本,调用editbin.exe /subsystem:windows yourapp.exe来更改应用程序的标志。
在解决方案中将editbin.exe和link.exe复制到一个文件夹下。在VS2017中,可以在项目的后期构建事件中使用以下命令:"$(SolutionDir)Build\bin\editbin.exe" -SUBSYSTEM:WINDOWS "$(SolutionDir)Project1\bin\Debug\netcoreapp1.1\win10-x64\Project1.exe"。可能由于需要修改csproj以使其构建为exe,因此可能无法让所有宏正常工作。
在Blazor Server与.NET Core一起使用时,可能会遇到一个问题,即将控制器添加到Razor库中后,控制器不再起作用(缺少终结点)。
对于如何在隐藏Kestrel命令窗口后停止应用程序,并想要使用按钮或Windows图标来关闭/停止应用程序,目前没有具体的解决方法。