Как перен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 можно указать версию платформы .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++)
перенаправление версий сборки
Вы можете перенаправлять привязанные во время компиляции ссылки на сборки .NET Framework, сторонние сборки или сборки вашего собственного приложения. Вы можете перенаправлять свое приложение, чтобы оно использовало другую версию сборки, несколькими способами: через политику издателя, с помощью файла конфигурации приложения или с помощью файла конфигурации компьютера. В этой статье описывается, как привязка сборки работает в платформа .NET Framework и как ее можно настроить.
Эта статья связана с платформа .NET Framework приложениями. Сведения о загрузке сборок в .NET 5+ (и .NET Core) см. в разделе о загрузке зависимостей в .NET.
Унификация сборок и привязка по умолчанию
Привязки к сборкам .NET Framework иногда перенаправляются в ходе процесса, называемого унификацией сборок. .NET Framework включает версию среды CLR и около двадцати сборок .NET Framework, входящих в состав библиотеки типов. Эти сборки .NET Framework рассматриваются средой выполнения как единый блок. По умолчанию при запуске приложения все ссылки на типы в коде, выполняемом средой выполнения, направляются в сборки .NET Framework, которые имеют тот же номер версии, что и среда выполнения, которая загружается в процессе. Перенаправления, которые реализуются в этой модели, — это поведение по умолчанию для среды выполнения.
Например, если приложение ссылается на типы в пространстве имен System.XML и было создано с помощью платформа .NET Framework 4.5, оно содержит статические ссылки на сборку System.XML, которая поставляется с средой выполнения версии 4.5. Если вы хотите перенаправить ссылку на привязку, чтобы указать на сборку System.XML, которая отправляется с платформа .NET Framework 4, можно поместить сведения о перенаправлении в файл конфигурации приложения. Перенаправление привязки в файле конфигурации для унифицированной сборки .NET Framework отменяет унификацию для этой сборки.
Кроме того, может потребоваться вручную перенаправить привязку для сборок сторонних производителей, если имеется несколько доступных версий.
Перенаправление версий с помощью политики издателя
Поставщики сборок могут направлять приложения в более новую версию сборки, включая файл политики издателя с новой сборкой. Файл политики издателя, который находится в глобальном кэше сборок, содержит параметры перенаправления сборок.
Каждая версия основной_номер.дополнительный_номер сборки имеет свой собственный файл политики издателя. Например, перенаправления от версии 2.0.2.222 к версии 2.0.3.000 и от версии 2.0.2.321 к версии 2.0.3.000 приводят к тому же файлу, поскольку они связаны с версией 2.0. Однако перенаправление от версии 3.0.0.999 к версии 4.0.0.000 приводит к файлу для версии 3.0.999. Каждая основная версия сборки .NET Framework имеет свой собственный файл политики издателя.
Если для сборки существует файл политики издателя, среда выполнения проверяет этот файл после проверки файла конфигурации приложения и манифеста сборки. Поставщики должны использовать файлы политики издателя только в том случае, если новая сборка имеет обратную совместимость с перенаправляемой сборкой.
Вы можете обойти политику издателя для своего приложения, задав параметры в файле конфигурации приложения, как описано в разделе Обход политики издателя.
Перенаправление версий на уровне приложения
Изменение файла конфигурации приложения вручную
Вы можете вручную изменить файл конфигурации приложения для решения проблем со сборкой. Например, если поставщик выпускает более новую версию сборки, которую ваше приложение использует без указания политики издателя, так как он не гарантирует обратной совместимости, можно направить приложение на использование новой версии сборки, поместив сведения о привязке сборки в файл конфигурации приложения следующим образом.
Использование автоматического перенаправления привязки
При создании классического приложения в Visual Studio, предназначенном для платформа .NET Framework версии 4.5.1 или более поздней версии, приложение использует автоматическое перенаправление привязок. Это означает, что если два компонента ссылаются на разные версии одной сборки со строгим именем, среда выполнения автоматически добавляет в выходной файл конфигурации приложения (app.config) перенаправление привязки в новую версию сборки. Это перенаправление переопределяет унификацию сборок, которая может происходить в противном случае. Исходный файл app.config не изменяется. Например, предположим, что приложение непосредственно ссылается на компонент .NET Framework вне потока, но использует стороннюю библиотеку, которая нацелена на более старую версию того же компонента. При компиляции приложения выходной файл конфигурации приложения изменяется, и в него включается перенаправление привязки в новую версию компонента. Если вы создаете веб-приложение, то получите предупреждение о конфликте привязки, которое в свою очередь дает вам возможность добавить необходимое перенаправление привязки в исходный файл веб-конфигурации.
Если вы вручную добавляете перенаправления привязки в исходный файл app.config, во время компиляции Visual Studio пытается объединить сборки на основе добавленных перенаправлений привязки. Например, предположим, что вы вставили следующее перенаправление привязки для сборки:
Если другой проект в вашем приложении ссылается на версию 1.0.0.0 той же сборки, автоматическое перенаправление привязки добавляет в выходной файл app.config следующую запись, чтобы приложение было унифицировано с версией 2.0.0.0 этой сборки:
Вы можете включить автоматическое перенаправление привязок, если приложение предназначено для более старых версий платформа .NET Framework. Это поведение по умолчанию можно переопределить, предоставив сведения о перенаправлении привязки в файле app.config для любой сборки или отключив функцию перенаправления привязки. Сведения о включении или отключении этой функции см. в разделе «Практическое руководство. Включение и отключение автоматического перенаправления привязки».
Обход политики издателя
При необходимости вы можете переопределить политику издателя в файле конфигурации приложения. Например, новые версии сборок, которые объявлены как поддерживающие обратную совместимость, могут все-таки нарушать работу приложения. Если вы хотите обойти политику издателя, добавьте в элемент зависимогоAssembly <>в файле конфигурации приложения и задайте для атрибута no, который переопределяет все предыдущие параметры да.
Обходите политику издателя, чтобы сохранить работоспособность приложения для пользователей, но обязательно сообщите о проблеме поставщику сборки. Если сборка имеет файл политики издателя, поставщик должен убедиться, что сборка имеет обратную совместимость и клиенты могут использовать новую версию в максимальной степени.
Перенаправление версий на уровне компьютера
Иногда администратор компьютера хочет, чтобы все приложения на компьютере использовали определенную версию сборки. Например, определенная версия может исправить отверстие безопасности. Если сборка перенаправляется в файле конфигурации компьютера с именем machine.config, все приложения на этом компьютере, использующие старую версию, направляются для использования новой версии. Файл конфигурации компьютера переопределяет файл конфигурации приложения и файл политики издателя. Этот файл machine.config находится в папке %windir%\Microsoft.NET\Framework[version]\config\machine.config для 32-разрядных компьютеров или %windir%\Microsoft.NET\Framework64[версия]\config\machine.config для 64-разрядных компьютеров.
Указание привязки сборки в файлах конфигурации
Следующий пример кода демонстрирует различные сценарии перенаправления привязки. В примере указывается перенаправление для диапазона версий myAssembly и одно перенаправление привязки для mySecondAssembly . В примере также указывается, что файл политики издателя не будет переопределять перенаправления привязок для myThirdAssembly .
Чтобы привязать сборку, необходимо указать строку urn:schemas-microsoft-com:asm.v1 с атрибутом xmlns в теге .
Ограничение привязок сборок к определенной версии
Например, чтобы перенаправить привязку сборки для .NET Framework версии 3.5, следует включить в файл конфигурации приложения приведенный ниже код XML.
Вы должны указывать сведения о перенаправлении в порядке версий. Например, следует указывать сведения о перенаправлении привязок сборок для сборок .NET Framework 3.5, а затем для сборок .NET Framework 4.5. Наконец, введите сведения о перенаправлении привязки сборок для любого перенаправления платформа .NET Framework сборки, который не использует атрибут appliesTo и поэтому применяется ко всем версиям платформа .NET Framework. В случае конфликта перенаправления используется первый подходящий оператор перенаправления в файле конфигурации.
Например, чтобы перенаправить одну ссылку на сборку .NET Framework 3.5, а другую ссылку — на сборку .NET Framework 4, можно использовать шаблон, показанный в следующем псевдокоде.
См. также
- Практическое руководство. Включение и отключение автоматического перенаправления привязки
- Разрешение безопасности перенаправления привязки сборок
- Сборки в .NET
- Программирование с использованием сборок
- Обнаружение сборок в среде выполнения
- Настройка приложений
- Схема параметров среды выполнения
- Схема файла конфигурации
- Практическое руководство. Создание политики издателя
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Практическое руководство. Использование Windows SDK в классическом приложении Windows
При создании классического проекта Windows в Visual Studio он предназначен для последней версии пакета SDK для Windows, установленного Visual Studio по умолчанию. Visual Studio устанавливает версию пакета SDK при установке рабочей нагрузки C++ Desktop. Пакет SDK для Windows поддерживает написание кода для Windows 7 с пакетом обновления 1 (SP1) и более поздних версий. Дополнительные сведения о целевых версиях Windows см. в разделе «Использование заголовков Windows» и «Обновление WINVER» и _WIN32_WINNT.
При обновлении существующего проекта вы можете использовать целевой пакет SDK для Windows, указанный в проекте. Вы также можете перенацелить проект, чтобы использовать последний пакет SDK для Windows. Благодаря последнему пакету SDK для Windows вы получите преимущества поддержки последних операционных систем и языковых стандартов.
Использование подходящего пакета SDK для Windows для проекта
Начиная с Visual Studio 2015 библиотека среды выполнения C (CRT) разделена на две части: одна часть, ucrtbase, содержит стандартные функции C и CRT, которые можно использовать в универсальных приложениях Windows. Эта библиотека теперь называется универсальной библиотекой CRT или UCRT и перемещена в пакет SDK для Windows. UCRT содержит множество новых функций, таких как функции C99, необходимые для поддержки последних стандартов языка C++. Другая часть исходной CRT — vcruntime. Он содержит код поддержки среды выполнения C, запуска и завершения, а также все остальное, что не входит в UCRT. Библиотека vcruntime устанавливается вместе с компилятором И набором инструментов C++ в Visual Studio. Дополнительные сведения см. в разделе о функциях библиотеки CRT.
Теперь UCRT — это системный компонент, установленный в каждой версии Windows 10 и более поздних версий. Он также доступен в качестве устанавливаемого компонента для всех предыдущих поддерживаемых версий Windows. Пакет SDK для Windows можно использовать для целей всех поддерживаемых версий Windows. Полный список поддерживаемых операционных систем см. в пакете SDK для Windows.
Чтобы перенацелить проекты на использование последнего пакета SDK для Windows при обновлении с версии проекта до Visual Studio 2015, выполните следующие действия:
Назначение последней версии пакета SDK для Windows
- Убедитесь, что установлен последний пакет SDK для Windows. Пакет SDK для Windows устанавливается в рамках разработки классических приложений с помощью рабочей нагрузки C++ в Установщике Visual Studio. Автономная версия доступна в пакете SDK для Windows.
- Откройте контекстное меню узла проекта и выберите проект Retarget. (В более ранних версиях Visual Studio выберите Версия пакета SDK для retarget.) Откроется диалоговое окно « Действия решения проверки».

- В раскрывающемся списке версий целевой платформы выберите версию пакета SDK для Windows, которую вы хотите использовать. Как правило, рекомендуется выбрать последнюю установленную версию. Нажмите кнопку «ОК«, чтобы применить изменение. 8.1 в этом контексте относится к пакету SDK для Windows 8.1. Если этот шаг выполнен успешно, в окне вывода появится следующее сообщение. Retargeting End: 1 completed, 0 failed, 0 skipped
- Откройте диалоговое окно свойств проекта. В разделе «Общие свойства > конфигурации» обратите внимание на значения версии целевой платформы Windows. Изменение значения на данном этапе действует аналогично данной процедуре. Дополнительные сведения см. в разделе Страница свойств «Общие» (проект).
Это действие приводит к изменению значений макросов проекта, содержащих пути к файлам заголовка и файлам библиотеки. Чтобы узнать, что изменилось, откройте раздел каталогов Visual C++ диалогового окна «Свойства проекта». Выберите одно из свойств, например «Включить каталоги«. Затем откройте раскрывающийся список значения свойства и нажмите кнопку «. Откроется диалоговое окно Каталоги включения .
Нажмите кнопку «Макросы» и прокрутите список макросов >> до макросов Windows SDK, чтобы просмотреть все новые значения. 
- Повторите процедуру перенацеления для других проектов решения, по мере необходимости и перестройте решение.
Изменение целевой платформы для пакета SDK для Windows 8.1
- Откройте контекстное меню узла проекта в Обозреватель решений и выберите проект Retarget. (В более ранних версиях Visual Studio выберите Версия пакета SDK для retarget.)
- В раскрывающемся списке версий целевой платформы выберите 8.1.