Окно консоли отображается, несмотря на использование OutputType WinExe с Microsoft.NET.Sdk.Web в Visual Studio

#c# #visual-studio #asp.net-core #.net-core #msbuild

#c# #visual-studio #asp.net-core #.net-core #msbuild

Вопрос:

Если я добавляю <OutputType>WinExe</OutputType> в новое консольное приложение, приложение запускается, выполняется основной метод, и приложение снова закрывается.

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

Если я изменю Sdk на Microsoft.NET.Sdk.Web и снова запущу приложение, откроется окно консоли.

Почему использование <Project Sdk="Microsoft.NET.Sdk.Web"> приводит к открытию окна консоли? Есть ли способ предотвратить это?

Редактировать: Похоже, что окно консоли открывается только в том случае, если приложение запущено в Visual Studio. Если я запускаю exe без Visual Studio, приложение запускается как фоновый процесс, как и ожидалось.

Правка2: я попытаюсь перефразировать вопрос:

Использование <Project Sdk="Microsoft.NET.Sdk.Web"> приводит к включению в проект множества реквизитов и целевых файлов. Где-то там должна быть причина открытия окна консоли.

Ответ №1:

Я открыл проблему на GitHub и получил подтверждение, что это ошибка в Visual Studio.

Смотрите:https://github.com/dotnet/project-system/issues/6613

Ответ №2:

Почему использование приводит к открытию окна консоли? Есть ли способ предотвратить это?

Когда вы меняете свой проект на use Microsoft.NET.Sdk.Web , что означает, что это веб-проект, вы неправильно перезагрузили свой проект. В нем пропущен launchSettings.json файл, в котором будет указано, как запустить ваш проект как веб-сайт.

На моей стороне, если вы неправильно перезагрузили свой проект, в нем будет отсутствовать launchSettings.json файл, поэтому, когда вы запустите свой проект, он запустит окно консоли:

введите описание изображения здесь

Предложение

1) Закройте экземпляр VS, удалите .vs скрытую папку в папке решения, bin и obj папку.

2)перезапустите VS, чтобы открыть свой проект для повторной инициализации проекта.

Он сгенерирует launchSettings.json файл.

введите описание изображения здесь

Это результат моего теста, и он не вызовет окно консоли.

введите описание изображения здесь

Кроме того, если в вашем проекте уже есть launchSettings.json файл, вы можете удалить его, а затем выполнить шаг 1 и шаг 2 для воссоздания файла.

Комментарии:

1. Вы не получаете окно консоли, потому что вы запускаете приложение в IISExpress. Это определенно не то, что я хочу. Кроме того, я получаю LaunchSettings.json, я также пытался изменить и удалить его, но, похоже, нет способа не открывать окно консоли VS. Итак, снова возникает вопрос: почему веб-Sdk вызывает всплывающее окно консоли в Visual Studio? Должно быть хотя бы свойство для отключения этого, нет?

2. Как вы запускали свое приложение без iis? Не могли бы вы поделиться с нами некоторыми шагами? Microsoft.NET.Sdk.Web означает, что это веб-проект asp net, и вы должны использовать iis. В противном случае, если вы измените формат запуска, он будет использовать измененный способ. Или, пожалуйста, поделитесь с нами более подробной информацией.

3. Вам не нужно использовать iis для запуска приложения asp. Вы можете использовать, например, Kestrel. Но дело не в этом. Просто используйте «ConsoleAppX» вместо «IIS Express», и вы увидите всплывающее окно консоли. Но он не должен этого делать, так как у нас указан OutputType WinExe.

4. Также использование Microsoft.NET.Sdk.Web не означает, что это «веб-проект asp net». Это означает, что будет включена куча реквизитов и целевых файлов. Добавляю я что-то веб-связанное с проектом или нет, зависит от меня. Так что, возможно, мне следует перефразировать свой вопрос: какая часть во всех этих реквизитах и целевых файлах вызывает окно консоли и как я могу от этого избавиться? Или, может быть, это просто Visual Studio, которая делает то, о чем я не просил.