#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, которая делает то, о чем я не просил.