是否可以在不显示控制台窗口的情况下运行.NET Core控制台应用程序?

25 浏览
0 Comments

是否可以在不显示控制台窗口的情况下运行.NET Core控制台应用程序?

我正在尝试为自己自动化一些任务,所以我写了几个.NET Core 1.0控制台应用程序。其中一个是BrowserRouter - 一个简单的应用程序,根据URL模式决定在我点击HTTP(S)链接时要打开哪个浏览器/浏览器配置文件。\n这个工作得很好,但是总是会出现一个出现并立即消失的控制台窗口。\n有没有办法让.NET Core控制台应用程序静默运行(隐藏控制台窗口)?\n我知道在完整的.NET Framework中,可以将输出类型更改为Windows应用程序,但这在.NET Core中还不可用(尚未?)。

0
0 Comments

在这个问题中,原因是作者想要在运行.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只在发布应用程序时才会触发,本地开发时不会生效。

0
0 Comments

问题原因:在运行 .NET Core 控制台应用程序时,默认情况下会显示控制台窗口,即使应用程序没有与用户进行交互。但有时候我们希望在后台运行应用程序,隐藏控制台窗口。

解决方法:对于 .NET Core 3.0+ (包括 .NET 5),只需要在 csproj 文件中添加以下代码即可实现隐藏控制台窗口:

WinExe

这样设置后,编译后的应用程序将以无窗口的方式运行,即控制台窗口将不再显示。

0
0 Comments

在.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图标来关闭/停止应用程序,目前没有具体的解决方法。

0