#.net #visual-studio #clr
#.net #visual-studio #среда clr
Вопрос:
Когда я создаю консольное приложение в Visual Studio, cmd
автоматически создается окно, в которое можно записывать текст и читать из него. Где настроено это поведение? Делает ли это VS или это просто следствие скомпилированного .Сетевая программа?
Кстати, как VS подключается System.Diagnostics.Debug.WriteLine("This is magic");
к окну вывода?
Ответ №1:
Поведение консоли является частью заголовка PE в exe-файле; существует флаг, позволяющий различать приложения консоли и Windows. Значение этого флага является практически единственным фундаментальным различием между Windows exe и консольным exe (вы все еще можете создавать формы из консольного exe и т.д. — И вы можете записывать на консоль из Windows exe, хотя вы ничего не сможете увидеть).
Вы можете переключить этот флаг с помощью editbin
, если хотите поиграть с ним — /subsystem:windows
флага, в частности.
Вывод отладки происходит потому, что отладчик подключается к заранее определенным точкам трассировки для сбора выходных данных. Если вы нажмете ctrl f5, он запустится без подключения каких-либо из этих перехватов, так что вы получите нечто более близкое к запуску непосредственно из командной строки.
Комментарии:
1. Может ли этот флаг быть установлен в VS или это в скомпилированном exe ?
2. @aligray — флаг находится в сгенерированном exe-файле. Вы выбираете это в VS, выбирая между Windows exe и console exe.
3. Если вы хотите увидеть вывод консоли из Windows exe, затем используйте P / Invoke для вызова
[AllocConsole
]( msdn.microsoft.com/en-us/library/ms681944 (VS.85).aspx ).4. Вы можете изменить настройку типа вывода, чтобы получить окно консоли в приложении Winforms (Проект Свойства, вкладка Приложения). Консоль. Вывод Write() перенаправляется в окно вывода IDE процессом размещения Visual Studio (Проект Свойства, вкладка Debug).
Ответ №2:
когда ваше консольное приложение скомпилировано, оно создает exe-файл, который является консольным приложением. при запуске этого exe-файла, скажем, из проводника Windows, вызывается окно cmd. Если вы запустите это приложение без отладчика, это, по сути, то же самое, как если бы вы запустили его из команды Run или проводника Windows…