Как перенaправить стандартный поток ввода-вывода в консоль Visual Studio?
Имеется решение из нескольких проектов. После успешной сборки последнего проекта консольного приложения Builder , его exe-файл вызывается на исполнение в событии после сборки (Проект->Свойства->События сборки). Запускаемый файл выполняет генерацию документации, установщиков и т.д. и длится это продолжительное время. В процессе работы приложение выводит в консоль сообщения, которые появляются все разом после завершения работы. Само приложение не содержит ничего особенного и просто вызывает различные exe-файлы с различными конфигурациями. Упрощённый пример приведён ниже:
using System; using System.Diagnostics; using System.IO; using System.Reflection; namespace Builder < class Program < private static readonly string EXE_PATH = Path.GetFullPath(Assembly.GetExecutingAssembly().Location); private static readonly string PROJECT_PATH = Path.GetFullPath(EXE_PATH + "\\..\\..\\..\\"); static Main(string[] args) < var files = Directory.GetFiles(PROJECT_PATH, "*.cnf"); foreach (string file in files) < try < var proc = new Process < EnableRaisingEvents = true, StartInfo = new ProcessStartInfo < FileName = Path.Combine(PROJECT_PATH, "compiler.exe"), Arguments = file, UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true >>; proc.Start(); while (!proc.StandardOutput.EndOfStream) < string line = proc.StandardOutput.ReadLine(); Console.WriteLine(line); >proc.WaitForExit(); > catch (Exception e) < Console.WriteLine($"By processing error occurred: " + e.Message); return; > > > > >
Командная строка события после сборки выглядит так: «$(TargetDir)Builder.exe» . Пробовал так: powershell start-process «$(TargetDir)Builder.exe» . В этом случае ехе’шник запускается в отдельном окне консоли, но сообщения выводятся по мере его работы, т.е. как нужно, но не в консоли Visual Studio. Пробовал и как подсказывают здесь, но всё равно вывод в консоль от compiler.exe выводится разом по завершении его работы. Каким образом можно вызвать программу и перенаправить её стандартный поток в консоль Visual Studio?
Общие сведения о настройке целевой платформы
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В Visual Studio можно указать версию платформы .NET, на которую будет ориентироваться проект. Нацеливание на платформу помогает гарантировать, что приложение использует только те функциональные возможности, которые доступны в указанной версии платформы. Для запуска приложений .NET Framework на другом компьютере версия платформы для такого приложения должна быть совместима с версией платформы, установленной на компьютере.
Решение Visual Studio может содержать проекты, предназначенные для различных версий .NET. Обратите внимание, что вы можете выполнить сборку только для одной версии .NET с помощью условий ссылок для одной сборки или рекурсивно создавать разные двоичные файлы для каждой версии. Дополнительные сведения о требуемых версиях .NET Framework см. в разделе Целевые платформы.
Вы также можете нацеливать приложения на различные платформы. Дополнительные сведения см. в разделе Настройка для различных версий.
Функции нацеливания на платформу
Среди прочего, доступны следующие возможности нацеливания на платформу:
- При открытии проекта, который ориентирован на более раннюю версию платформы, Visual Studio может автоматически обновить его или оставить имеющуюся настройку.
- При создании проекта .NET Framework можно указать версию платформы .NET Framework, на которую требуется ориентироваться.
- Вы можете ориентироваться на несколько платформ в одном проекте.
- В каждом из нескольких проектов в одном решении можно ориентироваться на разные версии .NET.
- Можно изменить версию .NET, на которую ориентирован существующий проект. При изменении версии платформы .NET, на которую сориентирован проект, Visual Studio вносит все необходимые изменения в ссылки и файлы конфигурации.
При работе над проектом, ориентированным на более раннюю версию платформы, Visual Studio динамически изменяет среду разработки, как показано ниже:
- Он фильтрует элементы в диалоговом окне «Добавление нового элемента«, диалоговое окно «Добавить новую ссылку» и диалоговое окно «Добавить ссылку на службу», чтобы опустить варианты, недоступные в целевой версии.
- Он фильтрует пользовательские элементы управления на панели элементов , чтобы удалить те, которые недоступны в целевой версии, и показывать только самые актуальные элементы управления, если доступны несколько элементов управления.
- Фильтрует IntelliSense, чтобы пропустить языковые функции, которые недоступны в целевой версии.
- Фильтрует свойства в окне Свойства, чтобы пропустить те, которые недоступны в целевой версии.
- Фильтрует пункты меню, чтобы пропустить те, которые недоступны в целевой версии.
- Для сборок система использует версию и параметры компилятора, которые подходят для целевой версии.
- Нацеливание на платформу не гарантирует правильную работу приложения. Нужно протестировать приложение, чтобы убедиться в том, что оно работает с целевой версией.
- Ориентироваться на версии платформы, предшествующие .NET Framework 2.0, запрещено.
Изменение требуемой версии .NET Framework
Для существующего проекта Visual Basic, C# или F# вы можете изменить целевую версию .NET в диалоговом окне свойств проекта. Сведения об изменении целевой версии для проектов C++ см. в статье How to: Modify the Target Framework and Platform Toolset (Практическое руководство. Изменение требуемой версии .NET Framework и набора средств платформы).

- В обозревателе решений правой кнопкой мыши откройте контекстное меню проекта, в который необходимо внести изменения, и выберите Свойства.
- В левом столбце окна Свойства перейдите на вкладку Приложение.
Примечание. После создания приложения UWP невозможно изменить целевую версию Windows или .NET.
- В обозревателе решений правой кнопкой мыши откройте контекстное меню проекта, в который необходимо внести изменения, и выберите Свойства.
- В левом столбце окна Свойства перейдите на вкладку Приложение.
Примечание. После создания приложения UWP невозможно изменить целевую версию Windows или .NET.
Для проекта .NET диалоговое окно может выглядеть примерно так: 
Если код содержит ссылки на другую версию .NET, отличную от целевой, при компиляции и запуске кода могут появиться сообщения об ошибках. Чтобы устранить эти ошибки, измените ссылки. См. раздел Устранение неполадок, связанных с настройкой для определенных версий платформы .NET.
В зависимости от целевой платформы ее можно представить в файле проекта следующим образом:
Выбор целевой версии платформы
При создании проекта .NET Framework выберите целевую версию .NET Framework после выбора шаблона проекта. Список доступных платформ включает их установленные версии, соответствующие типу выбранного шаблона. Для шаблонов проектов, отличных от .NET Framework, например шаблонов .NET Core, раскрывающийся список Платформа не отображается.

Если вы решили создать проект платформа .NET Framework, вы увидите интерфейс, аналогичный следующему снимку экрана:

Если вы решили создать проект .NET, вы увидите пользовательский интерфейс, аналогичный приведенным ниже двум снимкам экрана.
На первом экране вы увидите диалоговое окно Настройка нового проекта.

На втором экране появится диалоговое окно Дополнительные параметры.

Разрешение системных ссылок и пользовательских ссылок на сборки
Чтобы нацелиться на определенную версию .NET, нужно сначала установить подходящие ссылки на сборки. Вы можете скачать пакеты разработчика для разных версий .NET на странице скачиваемых материалов .NET.
Для проектов платформа .NET Framework диалоговое окно «Добавить ссылку« отключает системные сборки, которые не относятся к целевой платформа .NET Framework версии, чтобы они не могли быть непреднамеренно добавлены в проект. (Системные сборки — это DLL-файлы, включенные в версию платформа .NET Framework.) Ссылки, принадлежащие версии платформы, которая выше целевой версии, не будут разрешаться, и элементы управления, зависящие от такой ссылки, не могут быть добавлены. Если вы хотите активировать такую ссылку, измените целевую версию платформы .NET Framework для проекта на ту, которая содержит эту ссылку.
Дополнительные сведения о ссылках на сборки см. в разделе Разрешение сборок во время разработки.
Включение LINQ
При нацеливании на .NET Framework 3.5 или более поздней версии ссылка на System.Core и импорт уровня проекта для System.Linq (только в Visual Basic) добавляются автоматически. Если вы хотите использовать функции LINQ, нужно также включить параметр Option Infer (только в Visual Basic). Ссылка и импорт удаляются автоматически при изменении целевой версии на более раннюю версию .NET Framework. Дополнительные сведения см. в разделе Работа с LINQ.
См. также
- Целевые платформы
- Многоплатформенное нацеливание (MSBuild)
- Практическое руководство. Изменение требуемой версии .NET Framework и набора средств платформы (C++)
Публичная предварительная версия Microsoft Visual Studio 2022 выйдет в ближайшие несколько месяцев

Microsoft объявляет, что Visual Studio 2022 переходит на 64-разрядную версию и предлагает обновление пользовательского интерфейса, характерное для macOS.
Приложение получит несколько значительных обновлений, начиная с перехода на 64-битную архитектуру. Microsoft заявляет, что обновленная версия Visual Studio должна быть более быстрой, стабильной и легкой.
«Наша цель с Visual Studio 2022 для Mac — создать современную .NET IDE, адаптированную для Mac, которая обеспечивает продуктивную работу, которая вам так полюбилась в Visual Studio», — написала Аманда Сильвер из Microsoft в блоге разработчиков. «Мы работаем над переводом Visual Studio для Mac на собственный пользовательский интерфейс macOS, что означает, что он будет иметь лучшую производительность и надежность».
«Это также означает, что Visual Studio для Mac может в полной мере использовать все встроенные функции специальных возможностей macOS», — продолжила она. «Мы обновляем меню и терминологию в среде IDE, чтобы сделать Visual Studio более согласованной между Mac и Windows».
Visual Studio 2022 получит полный пересмотр пользовательского интерфейса для пользователей macOS, что сделает его совместимым с собственным пользовательским интерфейсом macOS. Приложение должно быть более надежным и в результате работать лучше. Версия для macOS также будет иметь интеграцию с GitHub, включая введение окна инструмента Git Changes.
Другие важные изменения включают полную поддержку .NET 6 и его унифицированных веб-приложений, клиентов и мобильных приложений, добавленную поддержку рабочей нагрузки C ++ и инструментов C ++ 20, а также функции совместной работы в реальном времени.
Хотя конкретная дата выпуска не указана, в заявлении Microsoft говорится, что первая общедоступная предварительная версия Visual Studio 2022 «выйдет этим летом».
Перенос десктопных приложений на .NET Core
С тех пор, как я начала работать с сообществом над переносом десктопных приложений с .NET Framework на .NET Core, я заметила, что существует «два лагеря»: представители одного хотят очень простой и короткий список инструкций для переноса своих приложений на .NET Core, в то время как представители другого предпочитают более принципиальный подход с большим количеством исходной информации. Вместо того, чтобы писать документ по типу «швейцарского армейского ножа», мы собираемся опубликовать два сообщения в блоге, по одному для каждого «лагеря»:
- Данный пост — простой случай. Он ориентирован на простые инструкции и небольшие приложения и рассматривает самый простой способ переноса приложения на .NET Core.
- Позднее мы опубликуем еще один пост для более сложных случаев. В нем основное внимание будет уделено нетривиальным приложениям, таким как WPF-приложение с зависимостями от WCF и сторонних UI-пакетов.
Шаг 0 – Предварительные условия
Для переноса десктопных приложений на Core понадобятся .NET Core 3 и Visual Studio 2019.
Шаг 1 – Запустите Portability Analyzer
Перед переносом следует проверить насколько совместимо ваше приложение с .NET Core. Для этого загрузите и запустите .NET Portability Analyzer.

- На первой вкладке, Portability Summary, если в столбце .NET Core все значения стоят на 100% (все выделено зеленым), ваш код полностью совместим, и вы можете перейти к Шагу 2.
- Если у вас есть значения менее 100%, сначала посмотрите на все сборки, которые не являются частью вашего приложения. Для них нужно проверить, предоставляют ли их авторы версии для .NET Core или .NET Standard.
- Теперь посмотрите на другую часть сборок, которая поступает из вашего кода. Если в Portability Report не указано ни одной сборки, перейдите к Шагу 2. Как только вы это сделаете, откройте вкладку Details, отфильтруйте таблицу, кликнув столбец Assembly и сосредоточьтесь только на тех, которые связаны с вашим приложением. Просмотрите список и рефакторинг кода, чтобы прекратить использование API или заменить использование API с альтернативами .NET Core.
Шаг 2 – Миграция .csproj в SDK-стиле
В Solution Explorer кликните правой кнопкой мыши свой проект (не решение!). Вы видите Edit Project File? Если да, то вы уже используете файл проекта в стиле SDK, поэтому вам следует перейти к Шагу 3. Если нет, сделайте следующее:
- Проверьте в Solution Explorer, содержит ли проект файл packages.config. Если его нет, то никаких действий не требуется, однако если он есть, кликните правой кнопкой мыши packages.config и выберите Migrate packages.config to PackageReference. Затем нажмите OK.
- Откройте файл проекта, кликнув правой кнопкой мыши по проекту и выбрав Unload Project. Затем кликните правой кнопкой мыши проект и выберите Edit .csproj.
- Скопируйте куда-нибудь содержимое файла проекта, например, в Блокнот, чтобы позже производить в нем поиск.
- Удалите все из файла проекта, открытого в Visual Studio (я знаю, это звучит агрессивно, но мы добавим только необходимый контент из копии, которую мы только что сделали в несколько шагов). Вместо только что удаленного текста вставьте следующий код.
Для приложения на WinForms:
WinExe net472 true false
Для приложения на WPF:
WinExe net472 true false
3.11.0
WindowsFormsApp1
Шаг 3 – Ретаргет на .NET Core
Откройте файл проекта, дважды кликнув его в Solution Explorer. Найдите свойство TargetFramework и измените значение на netcoreapp3.0. Теперь ваш файл проекта должен выглядеть так:
WinExe netcoreapp3.0 . .
Постройте и запустите свой проект. Поздравляем, вы перенесли его на .NET Core 3!
Исправление ошибок
Если вы столкнулись с такими ошибками, как
The type or namespace could not be found
The name does not exist in the current context
а ваш Portability Report отображался зеленым, то знайте – их легко исправить, просто добавив пакет NuGet с соответствующей библиотекой. Если же вам не удается найти пакет NuGet с отсутствующей библиотекой, то попробуйте обратиться к Microsoft.Windows.Compatibility. Этот пакет добавляет ~21K API .NET из .NET Framework.
Работа с конструкторами
Хотя пользовательский интерфейс приложения можно редактировать с помощью кода, разработчики обычно предпочитают использовать визуальные конструкторы. С .NET Core нам пришлось изменить архитектуру работы конструкторов с проектами .NET Core:
- Конструктор WPF уже находится в preview-режиме, и мы работаем над добавлением к нему дополнительных функций.
- Конструктор WinForms для .NET Core будет доступен позже, так что пока вы можете использовать конструктор WinForms для .NET Framework в качестве обходного пути.
- Скопируйте файл .csproj (допустим, MyProject.csproj), дайте ему другое имя, например, MyProject.NetFramework.csproj и поместите его рядом с существующим файлом проекта.
- Убедитесь, что ваш проект закрыт в Visual Studio, откройте новый проект MyProject.NetFramework.csproj.
В Solution Explorer щелкните правой кнопкой мыши свой проект и выберите Properties. На вкладке Application (должна открываться по умолчанию) задайте для Assembly name и Default namespace те же значения, что и в исходном проекте (удалите “.NetFramework” из имен).
Сохраните это решение рядом с существующим решением. - Откройте новый файл проекта и измените TargetFramework на net472.
- Теперь, когда вам нужно использовать конструктор WinForms, загрузите ваш проект с MyProject.NetFramework.csproj, и вы сможете начать работу с конструктором .NET Framework. Когда вы с ним закончите, закройте и откройте ваш проект с файлом проекта .NET Core.
- Это всего лишь обходной путь до тех пор, пока конструктор WinForms для .NET Core не будет готов.
Почему стоит переходить на .NET Core
Посмотрите видео, где мы со Скоттом Хантером (Scott Hunter) рассказываем обо всех новинках, связанных с .NET Core 3. Переход на .NET Core 3.0.
- Блог компании Microsoft
- .NET
- Visual Studio