尽管在 Visual Studio 中将 OutputType WinExe 与 Microsoft.NET.Sdk.Web 一起使用,但仍显示控制台 Window

Console Window shown despite using OutputType WinExe with Microsoft.NET.Sdk.Web in Visual Studio

如果我将 <OutputType>WinExe</OutputType> 添加到新的 ConsoleApp,应用程序就会启动,Main 方法是 运行 并且应用程序会再次关闭。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
</Project>

如果我将 Sdk 更改为 Microsoft.NET.Sdk.Web 并再次启动应用程序,则会打开一个控制台 window。

为什么使用 <Project Sdk="Microsoft.NET.Sdk.Web"> 会导致控制台 window 打开?有什么办法可以避免吗?

编辑:控制台 window 似乎只有在应用程序在 Visual Studio 中启动时才会打开。如果我 运行 没有 Visual Studio 的 exe,应用程序 运行 作为后台进程,正如预期的那样。

Edit2:我会尝试重新表述问题:

使用<Project Sdk="Microsoft.NET.Sdk.Web"> 会导致将一堆道具和目标文件包含到项目中。在某处一定有控制台 window 打开的原因。

为什么使用会导致控制台 window 打开?有什么办法可以避免吗?

当您将项目更改为使用 Microsoft.NET.Sdk.Web(这意味着它是一个 Web 项目)时,您没有正确地重新加载项目。它缺少一个 launchSettings.json 文件,该文件将指定将您的项目作为网站启动。

在我这边,如果你没有正确重新加载你的项目,它会丢失launchSettings.json文件,所以当你运行你的项目时,它将启动控制台 window:

建议

1)关闭VS实例,删除解决方案文件夹下的.vs隐藏文件夹,binobj文件夹

2),重启VS打开你的工程重新初始化工程

它将生成 launchSettings.json 个文件。

这是我的测试结果,它不会调用控制台window

此外,如果您的项目已经有一个launchSettings.json文件,您可以删除它,然后按照步骤1步骤 2 重新创建文件。

我在 GitHub 上提出了一个问题,并确认这是 visual studio 中的一个错误。

参见:https://github.com/dotnet/project-system/issues/6613