Как запустить проект в visual studio 2019 с
И так, пришло время создать свою первую программу на языке C# в MS Visual Studio. Так что, не будем терять время и запустим нашу IDE. При первом запуске MS Visual Studio появится окно, приведенное на рисунке ниже, в нем нужно нажать на ссылку «Не сейчас, возможно позже» (хотя, можете и осуществить вход, но для этого нужна учетная запись Microsoft), если Вы скачали русскоязычную версию Visual Studio (для простоты я буду показывать на такой версии, хотя сам использую английскую версию).
Окно приветствия, при первом запуске MS Visual Studio
В следующем окне (представлено на рисунке ниже), укажите в пункте «Параметры разработки» значение «Visual C#» и выберите подходящую Вам цветовую схему.

Настройка Visual Studio при первом запуске
Когда все действия выполнены, нужно нажать на кнопку «Запуск Visual Studio», после чего, Вы увидите окно, подобное тому что приведено ниже.

Завершение первого запуска Visual Studio
Теперь нужно немного подождать, пока выполниться инициализация Visual Studio и можно приступать к созданию первого проекта!
Дождались? Тогда переходим к созданию проекта. Для этого переходим в главное меню Visual Studio и выбираем пункт «Файл — Создать — Проект» (или «File — New — Project» в английской версии), как показано на рисунке ниже.

Создание нового проекта в VisualStudio через главное меню
Должно открыться окно «Создание проекта» (показано на рисунке ниже), в котором нужно:
- в левой области выбрать «Шаблоны — Visual C# — Windows»;
- в главной рабочей области выбрать «Консольное приложение»;
- в текстовом поле «Имя» указать название проекта (в нашем случае это будет «FirstProject»);
- в текстовом поле «Расположение» указать папку, где будут храниться проекты приложений (в моё случае это «D:\Программирование\Projects»);
- нажать на кнопку «OK».

Окно создания нового проекта в Visual Studio
Дождавшись завершения процесса создания нового проекта, еще раз посмотрим на главное окно IDE Visual Studio. Пример я привел на рисунке ниже, где обозначил самые важные на данном этапе рабочие области.

Главное окно Visual Studio
В главной рабочей области уже есть код программы, это так сказать стандартная заготовка, которую создает Visual Studio по умолчанию. Эта заготовка пока ничего не делает, и нам нужно её доработать… Для этого в рабоче области найдем основной «метод» (сточки зрения объектно ориентированного программирования), этот метод называется Main (как не странно, главный метод называет именно так ). Метод Main — это так называемая точка входы программы, будем считать, что это первое место, которое будет выполняться в программе!
А теперь давайте дополним наш код, так как показано ниже (добавленная строка выделена):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FirstProject < class Program < static void Main(string[] args) < Console.WriteLine("Hello, World!"); >> >
А теперь давайте посмотрим на результат! Для этого нужно «собрать» и запустить наше приложение. Идем в главное меню Visual Studo и выбираем пункт «Сборка — Собрать решение» (или как в английской версии Visual Studio «Build — Build Solution»).

Сборка первого проекта в Visual Stuio
Теперь осталось только запустить наше приложение, для этого снова идем в главное меню и выбираем пункт «Отладка — Запуск без отладки» (или «Debug — Start Without Debugging» в английской версии студии).

Запуск приложения через главное меню Visual Studio
В результате должно появиться окно следующего вида:

Первое консольное приложение
Вот это есть наша первая программа, она всего лишь осуществляет вывод строки «Hello, World!» в консоль… Но дальше будет интереснее! А пока, закройте окно в котором запущена наша первая программа, для этого, можно нажать в нем на любую клавишу, и оно должно закрыться.
В следующем уроке мы поговорим о том, что же представляю из себя компьютерные программы с точки зрения программиста. А пока, попробуйте заменить строку «Hello, World!» в рабочей области Visual Studio на строку «Привет, Вася!», снова собрать и запустить приложение.
Руководство. Использование MSBuild
MSBuild является платформой сборки для корпорации Майкрософт и Visual Studio. В этом руководстве описаны стандартные блоки MSBuild и показано, как писать, управлять и отлаживать проекты MSBuild. Здесь содержатся сведения о:
- создание файла проекта и работа с ним;
- Использование свойств сборки.
- использование элементов сборки.
MSBuild можно запустить в Visual Studio или из командного окна. В этом руководстве вы создадите файл проекта MSBuild с помощью Visual Studio. Вы отредактируете файл проекта в Visual Studio и с помощью командного окна выполните сборку проекта и просмотрите результаты.
Установка MSBuild
Если у вас есть Visual Studio, то MSBuild уже установлен. В Visual Studio 2019 и последующих средства сборки устанавливаются в папку установки Visual Studio. Для обычной установки по умолчанию в Windows 10 файл MSBuild.exe находится в папке установки MSBuild\Current\Bin.
Убедитесь, что в установщике выбраны средства MSBuild для используемых рабочих нагрузок, затем нажмите кнопку Установить.

Чтобы установить MSBuild в системе без Visual Studio, см. раздел Средства сборки для Visual Studio 2019 или установите пакет SDK для .NET.
Если у вас есть Visual Studio, то MSBuild уже установлен. В Visual Studio 2022 средства сборки устанавливаются в папку установки Visual Studio. Для обычной установки по умолчанию в Windows 10 файл MSBuild.exe находится в папке установки MSBuild\Current\Bin.
В установщике Visual Studio перейдите в раздел Отдельные компоненты и найдите флажок для MSBuild. Он автоматически выбирается при выборе любой другой рабочей нагрузки для установки.
Чтобы установить MSBuild в системе без Visual Studio, см. раздел «Средства сборки для Visual Studio 2022» на странице загрузок. Другой способ получить MSBuild — установить пакет SDK для .NET.
Создание проекта MSBuild
Система проектов Visual Studio основана на MSBuild. Легко создать новый файл проекта с помощью Visual Studio. В этом разделе описано, как создать файл проекта C#. Вместо него можно выбрать создание файла проекта Visual Basic. В контексте этого руководства разница между двумя файлами проекта является незначительным.
Создание файла проекта
- Откройте Visual Studio и создайте проект. В поле поиска введите winforms и нажмите кнопку «Создать новое приложение Windows Forms» (платформа .NET Framework). В появившемся диалоговом окне выберите Создать. В поле Имя проекта введите BuildApp . Введите расположение решения, например D:\.
- Щелкните ОК или Создать, чтобы создать файл проекта.
Анализ файла проекта
В предыдущем разделе вы использовали Visual Studio для создания файла проекта C#. Файл проекта представлен в обозревателе решений узлом проекта с именем BuildApp. Чтобы проанализировать файл проекта, можно использовать редактор кода Visual Studio.
Анализ файла проекта
- В обозревателе решений выберите узел проекта BuildApp.
- В браузере Свойства обратите внимание, что свойство Файл проекта имеет значение BuildApp.csproj. В именах всех файлов проектов указан суффикс proj. Если вы создали проект Visual Basic, файлу проекта будет задано имя BuildApp.vbproj.
- Еще раз щелкните правой кнопкой мыши узел проекта, а затем выберите Изменить BuildApp.csproj. Файл проекта откроется в редакторе кода.
Для некоторых типов проектов, например C++, необходимо выгрузить проект, прежде чем можно будет открыть и изменить файл проекта. Чтобы выгрузить проект, щелкните правой кнопкой мыши файл проекта и выберите Выгрузить проект.
Целевые объекты и задачи
Файлы проекта представляют собой файлы в формате XML с корневым узлом Проект.
Большинство проектов .NET имеют Sdk атрибут. Эти проекты называются проектами в стиле SDK.
Существует множество вариантов пакетов SDK для .NET для специальных целей; Они описаны в пакетах SDK для проекта .NET.
Создание приложения выполняется с помощью элементов Целевой объект и Задача.
- Задача — это наименьшая единица работы или, другими словами, атом сборки. Задачи являются независимыми исполняемыми компонентами, которые могут иметь входные и выходные данные. Сейчас в проекте отсутствуют определенные задачи или задачи, на которые существуют ссылки. Задачи добавляются в файл проекта в следующих разделах. Дополнительные сведения см. в статье о задачах.
- Целевой объект представляет собой именованную последовательность задач. Дополнительные сведения см. в статье о целевых объектах.
- [это может быть именованная последовательность задач, но крайне важно то, что она представляет собой что-то, что должно быть создано или выполнено, поэтому ее необходимо определить с помощью подхода, ориентированного на цели]
Целевой объект по умолчанию не определен в файле проекта. Вместо этого он указан в импортированных проектах. Элемент Import указывает импортированные проекты. Например, в проекте C# целевой объект по умолчанию импортируется из файла Microsoft.CSharp.targets.
Импортированные файлы эффективно вставляются в файл проекта, где бы они ни ссылались.
В проектах в стиле SDK вы не увидите этого элемента Import, так как атрибут SDK приводит к неявному импорту этого файла.
MSBuild отслеживает целевые объекты сборки и гарантирует, что каждый целевой объект будет построен не более одного раза.
Добавление целевого объекта и задачи
Добавьте целевой объект в файл проекта. Добавьте задачу в целевой объект, который печатает сообщение.
Добавление целевого объекта и задачи
-
Добавьте следующие строки в файл проекта сразу после инструкции Import или после начала элемента Project.
Задача Message является одной из многих задач, которые поставляется с MSBuild. Полный список доступных задач и сведения об их использовании см. в статье Справочные сведения о задачах MSBuild.
Задача Message принимает строковое значение атрибута Text в качестве входных данных и отображает его на выходном устройстве (или записывает его в один или несколько журналов, если применимо). Целевой объект HelloWorld дважды выполняет задачу Message: сначала отображает «Hello», а затем отображает «Мир».
Создание целевого объекта
Если вы пытаетесь создать этот проект из Visual Studio, он не создает определенный целевой объект. Это связано с тем, что Visual Studio выбирает целевой объект по умолчанию, который по-прежнему находится в импортированном .targets файле.
Запустите MSBuild из командной строки разработчика для Visual Studio, чтобы создать целевой объект HelloWorld, определенный ранее. Используйте параметр -target или -t для выбора целевого объекта.
Мы будем ссылаться на командную строку разработчика в качестве командного окна в следующих разделах.
Создание целевого объекта
- Откройте командное окно. В поле поиска на панели задач начните вводить имя средства, например dev или developer command prompt . Откроется список установленных приложений, которые соответствуют вашему шаблону поиска. Если его нужно найти вручную, файл — LaunchDevCmd.bat в папке \Common7\Tools .
- В командном окне перейдите в папку, содержащую файл проекта. В данном случае это D:\BuildApp\BuildApp.
- Выполните команду msbuild с параметром -t:HelloWorld . Эта команда выбирает и создает целевой объект HelloWorld:
msbuild buildapp.csproj -t:HelloWorld
Hello World
Если вместо них вы видите The target «HelloWorld» does not exist in the project , возможно, вы забыли сохранить файл проекта в редакторе кода. Сохраните файл и повторите попытку.
Переключаясь между редактором кода и командной строкой, можно изменять файл проекта и сразу же видеть результаты.
Свойства сборки
Свойства сборки являются парами «имя — значение», управляющими сборкой. В верхней части файла проекта уже определено несколько свойств сборки:
. 10.0.11107 2.0 WinExe .
Все свойства являются дочерними элементами по отношению к элементам PropertyGroup. Имя свойства — это имя дочернего элемента, а значение свойства — это текстовый элемент дочернего элемента. Например:
определяет свойство TargetFrameworkVersion, указывающее строковое значение версии 4.5.
Свойства сборки можно переопределять в любое время. If
отображается позже в файле проекта или в файле проекта, импортированном позже в файле проекта, а TargetFrameworkVersion принимает новое значение «v3.5».
Анализ значения свойства
Чтобы получить значение свойства, используйте следующий синтаксис, где PropertyName — имя свойства:
$(PropertyName)
С помощью этого синтаксиса проанализируйте некоторые свойства в файле проекта.
Анализ значения свойства
-
В редакторе кода замените целевой объект HelloWorld следующим кодом:
msbuild buildapp.csproj -t:HelloWorld
Configuration is Debug MSBuildToolsPath is C:\Program Files\Microsoft Visual Studio\2022\MSBuild\Current\Bin\amd64
Configuration is Debug MSBuildToolsPath is C:\Program Files (x86)\Microsoft Visual Studio\2019\MSBuild\16.0\Bin
Условные свойства
Многие свойства, например Configuration , определяются условно, то есть в элементе свойства отображается атрибут Condition . Условные свойства определяются или переопределяются только в том случае, если условие оценивается как true. Неопределенные свойства задают значение по умолчанию пустой строки. Например:
Debug
значение «Если свойство конфигурации еще не определено, определите его и присвойте ему значение «Отладка».
Атрибут Condition может быть почти у всех элементов MSBuild. Дополнительные сведения об использовании атрибута Condition см. в статье об условиях.
Зарезервированные свойства
MSBuild резервирует некоторые имена свойств для хранения сведений о файле проекта и двоичных файлах MSBuild. Примером зарезервированного свойства является MSBuildToolsPath. Зарезервированные свойства указываются с символом $, как и любое другое свойство. Дополнительные сведения см. в статьях Практическое руководство. Использование ссылки на имя или расположение файла проекта и Зарезервированные и стандартные свойства MSBuild.
Переменные среды
Ссылаться на переменные среды в файлах проектов можно так же, как на свойства сборки. Например, чтобы использовать переменную среды PATH в файле проекта, примените $(Path). Если проект содержит определение свойства с тем же именем, что и у переменной среды, свойство в проекте переопределит значение переменной среды. Дополнительные сведения см. в статье Практическое руководство. Использование переменных среды в сборке.
Задание свойств из командной строки
Свойства можно определить в командной строке с помощью переключателя командной строки -property или -p. Значения свойств, полученные из командной строки, переопределяют значения свойств, заданные в файле проекта и переменных среды.
Настройка значения свойства из командной строки
-
В командном окне введите и выполните следующую строку:
msbuild buildapp.csproj -t:HelloWorld -p:Configuration=Release
Configuration is Release.
MSBuild создает свойство Configuration и дает ему значение Release.
Специальные символы
Некоторые символы имеют особое значение в файлах проекта MSBuild. К ним относятся точка с запятой (;) и звездочка (*). Чтобы использовать эти специальные знаки в качестве литералов в файле проекта, их необходимо задать с помощью синтаксиса %, где представляет шестнадцатеричное значение ASCII знака.
Измените задачу Message, чтобы отображать значение свойства Configuration со специальными символами для удобства чтения.
Использование специальных символов в задаче Message
-
В редакторе кода замените обе задачи Message следующей строкой:
msbuild buildapp.csproj -t:HelloWorld
$(Configuration) is "Debug"
Дополнительные сведения см. в статье Специальные символы в MSBuild.
Элементы сборки
Элемент — это часть данных, обычно имя файла, которая используется в качестве входных данных для системы сборки. Например, коллекцию элементов, представляющую исходные файлы, можно передать в задачу Compile, чтобы скомпилировать их в сборку.
Все элементы являются дочерними элементами по отношению к элементам ItemGroup. Именем элемента является имя дочернего элемента, а значением — значение атрибута Include дочернего элемента. Значения элементов с одинаковым именем собираются в типы элементов с таким именем. Например:
определяет группу элементов, содержащую два элемента. Тип элемента Compile имеет два значения: Program.cs и Properties\AssemblyInfo.cs.
Следующий код создает один и тот же тип элемента, объявляя оба файла в одном Include атрибуте, разделенный точкой с запятой.
Дополнительные сведения см. в разделе Элементы.
Пути к файлам задаются относительно папки, содержащей файл проекта MSBuild, даже если файл проекта является импортированным. Существует несколько исключений, например при использовании элементов Import и UsingTask.
Анализ значений типа элемента
Чтобы получить значения типа элемента, используйте следующий синтаксис, где ItemType имя типа элемента:
@(ItemType)
Используйте этот синтаксис для проверки Compile типа элемента в файле проекта.
Анализ значений типа элемента
-
В редакторе кода замените целевую задачу HelloWorld следующим кодом:
msbuild buildapp.csproj -t:HelloWorld
Compile item type contains Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs
По умолчанию значения типа элемента разделены точкой с запятой.
Чтобы изменить разделитель типа элемента, используйте следующий синтаксис, где ItemType — это тип элемента, а Separator — это строка из одного или нескольких разделительных символов:
@(ItemType, Separator)
Измените задачу Message для использования символов возврата каретки и перевода строки (%0A%0D) для отображения элементов Compile по одному в строке.
Отображение значений типов элементов по одному в строке
-
В редакторе кода замените задачу Message следующей строкой:
msbuild buildapp.csproj -t:HelloWorld
Compile item type contains Form1.cs Form1.Designer.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs
Атрибуты Include, Exclude и подстановочные знаки
Можно использовать подстановочные знаки «*», «**» и «?» с атрибутом Include, чтобы добавить элементы к типу элемента. Например:
добавляет все файлы с расширением файла .jpeg в папке изображений к типу элемента Photos, тогда как
добавляет все файлы с расширением файла .jpeg в папке изображений и всех ее вложенных папках к типу элемента Photos. Дополнительные примеры см. в статье Практическое руководство. Выбор файлов для сборки.
Обратите внимание, что как элементы объявляются, они добавляются в тип элемента. Например:
создает тип элемента с именем Photo, содержащий все файлы в папке изображений с расширением .jpeg .gif файла либо. Эти строки эквивалентны следующей строке:
Элемент можно исключить из типа элемента с атрибутом Exclude . Например:
добавляет все файлы с расширением .cs в тип элемента Compile, за исключением файлов, имена которых содержат строку Designer. Дополнительные сведения см. в статье Практическое руководство. Исключение файлов из сборки.
Атрибут Exclude влияет только на элементы, добавленные атрибутом Include в элементе элемента, который содержит оба элемента. Например:
не исключит файл Form1.cs , который был добавлен в предыдущий элемент элемента элемента.
Включение и исключение элементов
-
В редакторе кода замените задачу Message следующей строкой:
msbuild buildapp.csproj -t:HelloWorld
XFiles item type contains Form1.cs;Program.cs;Properties/Resources.resx
Метаданные элементов
Элементы могут содержать метаданные в дополнение к данным, собранным из Include и Exclude атрибутов. Задачи, требующие больше информации о элементах, чем только значение элемента, может использовать эти метаданные.
Для объявления элементов в файле проекта создается элемент с именем метаданных, являющийся дочерним по отношению к элементу. Элемент может содержать нуль или более значений метаданных. Например, следующий элемент CSFile содержит метаданные Culture со значением Fr:
Чтобы получить значение метаданных типа элемента, используйте следующий синтаксис, где ItemType имя типа элемента и MetaDataName — имя метаданных:
%(ItemType.MetaDataName)
Анализ метаданных элементов
-
В редакторе кода замените задачу Message следующей строкой:
msbuild buildapp.csproj -t:HelloWorld
Compile.DependentUpon: Compile.DependentUpon: Form1.cs Compile.DependentUpon: Resources.resx Compile.DependentUpon: Settings.settings
Обратите внимание, что фраза Compile.DependentUpon появляется несколько раз. Использование метаданных с этим синтаксисом в целевом объекте приводит к пакетной обработке. Пакетная обработка означает, что задачи в целевом объекте выполняются один раз для каждого уникального значения метаданных. Пакетная обработка — это сценарий MSBuild, эквивалентный общей конструкции программирования foreach. Дополнительные сведения см. в статье Пакетная обработка.
Стандартные метаданные
Всякий раз, когда элемент добавляется в список элементов, ему назначаются некоторые стандартные метаданные. Например %(Filename) возвращает имя файла любого элемента. Полный список стандартных метаданных см. в статье Общеизвестные метаданные элементов MSBuild.
Анализ стандартных метаданных
-
В редакторе кода замените задачу Message следующей строкой:
msbuild buildapp.csproj -t:HelloWorld
Compile Filename: Form1 Compile Filename: Form1.Designer Compile Filename: Program Compile Filename: AssemblyInfo Compile Filename: Resources.Designer Compile Filename: Settings.Designer
По сравнению с предыдущими двумя примерами можно увидеть, что хотя не каждый элемент в типе элемента компиляции содержит метаданные Зависимого элемента, все элементы имеют известные метаданные имени файла.
Преобразования метаданных
Списки элементов могут быть преобразованы в новые списки элементов. Чтобы преобразовать список элементов, используйте следующий синтаксис, где — это имя типа элементов, а — имя метаданных:
@(ItemType -> '%(MetadataName)')
Например, список элементов исходных файлов можно преобразовать в коллекцию объектных файлов с помощью выражения @(SourceFiles -> ‘%(Filename).obj’) . Дополнительные сведения см. в статье Преобразования.
Преобразование элементов с помощью метаданных
-
В редакторе кода замените задачу Message следующей строкой:
'%(filename).bak')" />
msbuild buildapp.csproj -t:HelloWorld
Backup files: Form1.bak;Form1.Designer.bak;Program.bak;AssemblyInfo.bak;Resources.Designer.bak;Settings.Designer.bak
Обратите внимание, что метаданные, выраженные в этом синтаксисе, не вызывают пакетную обработку.
Следующие шаги
Чтобы узнать, как создать простой файл проекта один шаг за раз в Windows, попробуйте создать файл проекта MSBuild с нуля.
Если вы используете в основном пакет SDK для .NET, перейдите по ссылке MSBuild для проектов пакета SDK для .NET.
См. также
- Общие сведения об MSBuild
- Справочные сведения о MSBuild
Новые возможности для C++ в Visual Studio 2022
В Visual Studio 2022 реализовано множество обновлений и исправлений для среды Microsoft C++. Мы добавили функции и исправили множество ошибок и проблем в компиляторе и средствах. Visual Studio IDE также предлагает значительные улучшения производительности и продуктивности и теперь работает в виде собственного 64-разрядного приложения.
Дополнительные сведения о новых возможностях visual Studio см. в статье «Новые возможности Visual Studio 2022». Дополнительные сведения о новых возможностях документации по C++ см . в документации по Microsoft C++: новые возможности.
Новые возможности C++ в Visual Studio версии 17.8
Кратко, некоторые из новых функций:
- Структурированные диагностика C++ в окне вывода и новое окно сведений о проблеме, которое содержит дополнительные сведения об ошибке. Дополнительные сведения см. в разделе «Структурированные выходные данные SARIF» и «Сведения о проблеме».
- Функция, которая позволяет визуализировать размер и выравнивание классов, структур, профсоюзов, базовых типов или перечислений даже до компиляции кода. Наведите указатель мыши на идентификатор и краткие сведения о размере и выравнивании.
- Функция, предполагающая, когда следует пометить функции-члены const , так как они не изменяют состояние объекта. Наведите указатель мыши на функцию-член и щелкните значок лампочки, чтобы пометить функцию как const .
- Теперь Visual Studio предложит пометить глобальные функции как статические с помощью значка отвертки, который будет отображаться именем функции. Щелкните значок отвертки, чтобы пометить функцию как статическую.
- Неиспользуемые директивы #include не используются в редакторе. Вы можете навести указатель мыши на неактивное включение и использовать меню лампочки, чтобы удалить их или все неиспользуемые. Вы также можете добавлять #include директивы для сущностей, которые сейчас косвенно включены через другие заголовки. Дополнительные сведения см. в разделе «Очистка C/C++ в Visual Studio».
- Дополнительная поддержка Unreal Engine:
- Адаптер тестирования Unreal Engine позволяет обнаруживать, запускать, администрировать и отлаживать тесты Unreal Engine без выхода из интегрированной среды разработки Visual Studio.
- С помощью фрагментов кода Unreal Engine вы можете найти распространенные конструкции Unreal Engine в виде фрагментов в списке участников.
- Сборка Аналитика теперь интегрирована с Visual Studio 2022 и работает с проектами MSBuild и CMake с помощью MSVC. Теперь можно просмотреть дополнительные сведения о компиляции функции, например о том, сколько времени потребовалось для компиляции и количества ForceInlines.
Дополнительные сведения о новых возможностях C++ в Visual Studio 17.8 см. в статье «Новые возможности для разработчиков C++ в Visual Studio 2022 17.8».
Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.8 см. в заметках о выпуске Visual Studio 2022 версии 17.8.Новые возможности C++ в Visual Studio версии 17.8
Кратко, некоторые из новых функций:
- Структурированные диагностика C++ в окне вывода и новое окно сведений о проблеме, которое содержит дополнительные сведения об ошибке. Дополнительные сведения см. в разделе «Структурированные выходные данные SARIF» и «Сведения о проблеме».
- Функция, которая позволяет визуализировать размер и выравнивание классов, структур, профсоюзов, базовых типов или перечислений даже до компиляции кода. Наведите указатель мыши на идентификатор и краткие сведения о размере и выравнивании.
- Функция, предполагающая, когда следует пометить функции-члены const , так как они не изменяют состояние объекта. Наведите указатель мыши на функцию-член и щелкните значок лампочки, чтобы пометить функцию как const .
- Теперь Visual Studio предложит пометить глобальные функции как статические с помощью значка отвертки, который будет отображаться именем функции. Щелкните значок отвертки, чтобы пометить функцию как статическую.
- Неиспользуемые директивы #include не используются в редакторе. Вы можете навести указатель мыши на неактивное включение и использовать меню лампочки, чтобы удалить их или все неиспользуемые. Вы также можете добавлять #include директивы для сущностей, которые сейчас косвенно включены через другие заголовки. Дополнительные сведения см. в разделе «Очистка C/C++ в Visual Studio».
- Дополнительная поддержка Unreal Engine:
- Адаптер тестирования Unreal Engine позволяет обнаруживать, запускать, администрировать и отлаживать тесты Unreal Engine без выхода из интегрированной среды разработки Visual Studio.
- С помощью фрагментов кода Unreal Engine вы можете найти распространенные конструкции Unreal Engine в виде фрагментов в списке участников.
- Сборка Аналитика теперь интегрирована с Visual Studio 2022 и работает с проектами MSBuild и CMake с помощью MSVC. Теперь можно просмотреть дополнительные сведения о компиляции функции, например о том, сколько времени потребовалось для компиляции и количества ForceInlines.
Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.8 см. в заметках о выпуске Visual Studio 2022 версии 17.8.
Новые возможности C++ в Visual Studio версии 17.7
Кратко, некоторые из новых функций:
- Ускорить отладку сеансов и ускорить загрузку проекта
- Пошаговая визуализация расширения макроса
- Скачать один щелчком мыши для подсистема Windows для Linux (WSL)
- Улучшенная поддержка комментариев Doxygen
- Аналитика сборки C++ для разработки игр
- /std:clatest Добавлен для компилятора C.
- Улучшения проекта Unreal Engine, такие как более быстрая цветовая кодировка IntelliSense и синтаксис, возможность найти все ссылки на схему Unreal Engine и многое другое.
Сводка по новым функциям C++, которые относятся к разработке игр, см. в статье «Развязывание возможностей Visual Studio 2022 для разработки игр на C++»
Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.7 см . в заметках о выпуске Visual Studio 2022 версии 17.7.
Новые возможности C++ в Visual Studio версии 17.6
Кратко говоря, некоторые из новых функций: отладка скрипта CMake, встроенная поддержка языка заливки высокого уровня (HLSL), средства просмотра журнала Unreal Engine, начальная поддержка C++20 в проектах C++/CLI, vcpkg теперь добавляется по умолчанию, а некоторые функции стандартной библиотеки C++23 для диапазонов. Полный список новых функций, добавленных в стандартную библиотеку, см. в журнале изменений STL.
Сводка по новым функциям в интегрированной среде разработки Visual Studio 17.6 см. в заметках о выпуске Visual Studio 2022 версии 17.6.
Новые возможности C++ в Visual Studio версии 17.5
Сводка по новым функциям C++ в Visual Studio версии 17.5 см. в статье «Новые возможности для разработчиков C++ в Visual Studio 2022 17.5». Сводка по новым функциям и исправлениям ошибок в интегрированной среде разработки Visual Studio версии 17.5 см . в заметках о выпуске Visual Studio 2022 версии 17.5.
- std::move , , std::forward std::move_if_noexcept и std::forward_like теперь не создают вызовы функций в созданном коде даже в режиме отладки. Это изменение позволяет избежать именованных приведения, вызывающих ненужные затраты в сборках отладки. /permissive- (или вариант, который подразумевает его, например /std:c++20 или std:c++latest ) является обязательным.
- Добавлено [[msvc::intrinsic]] для поддержки приведенного выше элемента. Этот атрибут можно применить к нерекурсивным функциям, состоящим из одного приведения, который принимает только один параметр.
- Добавлена поддержка консоли Linux в интегрированном терминале, которая позволяет выполнять ввод-вывод терминала.
- Добавлена начальная экспериментальная поддержка атомарных примитивов C11 ( ). Эту экспериментальную функцию можно включить с параметром /experimental:c11atomics в /std:c11 режиме или более поздней версии.
- Добавлен новый набор экспериментальных высокоуверенных проверка в средство проверки времени существования для снижения шума.
- Новая функция предварительной версии, удаленная проводник, позволяет просматривать каталог файлов на удаленных компьютерах в VS, а также отправлять и скачивать в него файлы.
- Изменено управление версиями исполняемых файлов CMake, поставляемых с Visual Studio для сопоставления версий Kitware.
- Добавлена поддержка Горячая перезагрузка в шаблон проекта CMake.
- Перейти к определению для C++ теперь использует более тонкий индикатор операции, который занимает больше времени, заменив модальное диалоговое окно из предыдущих версий.
- Начало развертывания эксперимента, предоставляющего более умные результаты в списке автозавершения и члена C++. Эта функция ранее была известна как Predictive IntelliSense, но теперь использует новый метод презентации.
- Теперь мы отправим собственный набор инструментов Arm64 Clang с помощью рабочей нагрузки LLVM, что позволяет выполнять собственную компиляцию на компьютерах Arm64.
- Добавлена локализация в расширение «Просмотр изображений» (это расширение доступно в Marketplace и не входит в пакет с помощью установщика Visual Studio).
- Добавлена поддержка открытия окна терминала в текущий запущенный контейнер разработчика.
- Улучшено расширение макросов IntelliSense. В частности, мы включили рекурсивное расширение в дополнительных контекстах, и мы добавили параметры во всплывающем окне, чтобы скопировать расширение в буфер обмена или развернуть макрос в виде встроенного.
- Теперь в последовательном мониторе поддерживается одновременный мониторинг. Одновременный мониторинг позволяет отслеживать несколько портов одновременно параллельно. Нажмите кнопку «плюс», чтобы открыть другой последовательный монитор и начать работу.
- Теперь можно просматривать свойства из базовых классов, измененных в ресурсе Unreal Blueprint, не выходя из Visual Studio. Дважды щелкните ссылку на схему для класса или свойства C++, чтобы открыть инспектор активов UE в Visual Studio.
- Включен запуск DevContainers на удаленном компьютере Linux.
- Включен выбор нескольких целевых объектов для сборки в представлении целевых объектов CMake.
- Добавлена поддержка CMakePresets.json версии 5. Дополнительные сведения о новых функциях см. в документации по CMake.
- Включена Обозреватель тестирования для параллельного создания и тестирования нескольких целевых объектов CMake.
- Добавлен параметр «Открыть контейнер в терминале» в контейнеры разработки.
- Реализованы стандартные функции библиотеки:
- basic_format_string P2508R1, format_string wformat_string
- ranges::fold_left P2322R6, ranges::fold_right и т. д.
- views::zip P2321R2 (не включает zip_transform , adjacent и adjacent_transform )
Новые возможности C++ в Visual Studio версии 17.4
Сводка по новым функциям и исправлениям ошибок в Visual Studio версии 17.4 см. в заметках о выпуске Visual Studio 2022 версии 17.4 и новых возможностях разработчиков C++ в Visual Studio 2022 17.4.
- Улучшены сообщения об ошибках компилятора, чтобы обеспечить более правильную и полезную информацию, особенно для концепций.
- Добавлен экспериментальный параметр /experimental:log MSVC для вывода структурированных диагностика SARIF в указанный каталог.
- Добавлена поддержка атрибутов C23 в IntelliSense и продолжалась поддержка модулей C++20.
- Улучшена производительность индексирования при открытии нового решения. Крупные проекты могли видеть улучшение на 20-35% с 17,3.
- Улучшена оптимизация именованных возвращаемых значений (NRVO):
- NRVO включен для случаев обработки исключений или циклов.
- NRVO включен даже /Od в том случае, если пользователь передает /Zc:nrvo параметр или /std:c++20 более поздней версии или /permissive- .
- Теперь можно отключить NRVO с параметром /Zc:nrvo- .
- Скрипты Ant были удалены, поэтому пользователи больше не видят шаблонов на основе муравей в диалоговом окне «Новый проект». Справку по миграции из шаблонов Ant в шаблоны Gradle см. в разделе «Миграция сборок из Apache Ant»
- Добавлена поддержка сборки с помощью NDK 23 и 24
- Обновлен компонент NDK до LTS версии 23
- ranges::contains P2302R4, ranges::contains_subrange
- string_view Конструктор диапазона P2499R0 должен быть explicit
- auto(x) P0849R8: разложение копирования на языке (Часть компилятора еще не реализована. Часть библиотеки была реализована в режиме C++20 при первоначальной реализации поддержки Ranges.)
- P0881R7
- P2301R1 добавление псевдонима pmr для std::stacktrace
- P1328R1 constexpr type_info::operator==()
- ranges::iota P2440R1, ranges::shift_left , ranges::shift_right
- P2441R2 views::join_with
Новые возможности C++ в Visual Studio версии 17.3
Сводка по новым функциям и исправлениям ошибок в Visual Studio в версии 17.3 см. в разделе о улучшениях выпуска Visual Studio 2022 версии 17.3 и C++ .
- Цепочка инструментов Arm64EC больше не помечена как экспериментальная и готова к использованию в рабочей среде.
- Теперь терминал Visual Studio можно использовать в качестве клиента SSH с сохраненными подключениями SSH. Установив средства C++ для Linux, откройте окно средства терминала. Раскрывающийся список терминала заполняется сохраненными подключениями. При выборе подключения откроется новое окно терминала в Visual Studio, где отображается псевдо-терминал в удаленной системе. Все элементы управления символами, цветами и осведомленностью о позиции курсора поддерживаются.
- Visual Studio теперь может добавлять шаблоны классов Unreal Engine для проектов UE. Чтобы попробовать эту функцию, убедитесь, что поддержка интегрированной среды разработки Unreal Engine выбрана в рабочей нагрузке «Игра» с помощью рабочей нагрузки C++ в установщике Visual Studio. При работе с проектом UE щелкните правой кнопкой мыши проект или папку или фильтр и выберите «Добавить >класс UE».
- Перейти к определению теперь запоминает предыдущий сигнатуры и перемещается соответствующим образом, если лучшее совпадение недоступно (например, после изменения подписи одной из пар вручную). Улучшена скорость реагирования go To All . Ранее результаты появились после остановки ввода. В новом интерфейсе результаты отображаются при вводе.
- В контекстах, требующих enum завершения типа (например, назначения enum переменных, меток регистра, возвращаемого enum типа и т. д.), список автозаполнения теперь фильтруется только для соответствующих перечислителей и связанных конструкций.
- Добавлена поддержка NuGet PackageReference для проектов C++/CLI MSBuild, предназначенных для .NET Core. Это изменение было внесено для разблокировки смешанных баз кода от возможности внедрения .NET Core. Эта поддержка не работает для других типов проектов C++ или любых типов проектов C++, предназначенных для платформа .NET Framework. Нет планов расширить поддержку PackageReference в других сценариях C++. Команда работает над отдельными возможностями, связанными с vcpkg для сценариев, отличных от MSBuild, и для добавления дополнительных функциональных возможностей.
- Добавлено окно последовательного монитора для встроенной разработки, доступное с помощью последовательного>монитора Windows.>
- Улучшено индексирование C++ на ~66% по сравнению с 17,2.
- Обновлена версия CMake, поставляемая с Visual Studio, до версии 3.23. Дополнительные сведения о доступных доступных заметках о выпуске CMake 3.23 см. в заметках о выпуске CMake 3.23.
- Обновлены версии средств LLVM, поставляемых с Visual Studio до версии 14. Дополнительные сведения о доступных сведениях см. в заметках о выпуске LLVM и Clang .
- Обновлен набор инструментов C++ параллельно с dev 16.11 до версии 14.29.30145.00. Последняя версия набора инструментов C++ dev 16.11 содержит важные исправления ошибок, включая исправление всех оставшихся отчетов о дефектах C++20. Дополнительные сведения о исправлениях ошибок, включая отчеты о дефектах C++20 в dev 16.11, см . в заметках о выпуске Visual Studio 2019 версии 16.11.14.
- Внесены различные улучшения в интерфейсе редактора модулей C++ . Мы постоянно работаем над улучшением качества опыта, но рекомендуем вам попробовать их в 17.3. Сообщите о оставшихся проблемах с помощью Сообщество разработчиков.
Новые возможности C++ в Visual Studio версии 17.2
Сводка по новым функциям и исправлениям ошибок в Visual Studio в версии 17.2 см . в заметках о выпуске Visual Studio 2022 версии 17.1.
- Добавлена поддержка компилятора функции C++23 для вывода this , которая доступна под флагом /std:c++latest .
- Добавлена поддержка IntelliSense для функций C++23 для вывода this и if consteval .
- Добавлена поддержка подсказок имени и типа встроенного параметра, переключаемая с помощью клавиш ALT+F1 или двойного нажатия клавиши CTRL. Это поведение можно настроить в разделе Tools, Options, Text Editors, C/C++, IntelliSense (Инструменты, Параметры, Текстовые редакторы, C/C++, IntelliSense).
- Добавлена экспериментальная поддержка модулей C++20 в проектах CMake. Сейчас эта поддержка доступна только для генератора Visual Studio (MSBuild).
- В версии 17.1 впервые появились представления периферийных регистров и ОСРВ для разработчиков встроенных платформ. Мы продолжаем совершенствовать эти представления и в версии 17.2 внесли ряд улучшений для удобства использования.
- Окно инструментов ОСРВ теперь по умолчанию скрыто. Это предотвращает появление окна инструментов с сообщениями об ошибках, которые не актуальны без использования ОСРВ.
- При двойном щелчке объекта ОСРВ в окне инструмента он добавляет часы для объекта.
- При выборе начальных и конечных значений указателя стека в окне инструментов ОСРВ откроется в окне памяти.
- Добавлена осведомленность о потоках для целевых объектов устройств в окне стека вызовов.
- Теперь пользователи могут щелкнуть значок для закрепления регистров, периферийных регистров или полей вверху соответствующего представления.
Новые возможности C++ в Visual Studio версии 17.1
Сводка по новым функциям и исправлениям ошибок в Visual Studio в версии 17.1 см. в заметках о выпуске Visual Studio 2022 версии 17.1.
- Добавлен новый шаблон настройки предустановки для настройки и сборки проектов CMake в удаленной системе macOS с CMakePresets.json помощью . Можно также запустить целевые объекты CMake на удаленной системе macOS, а затем выполнить удаленную отладку в отладчике Visual Studio с подключением GDB или LLDB.
- Теперь можно выполнить отладку дампов ядра на удаленной системе macOS из Visual Studio с помощью LLDB или GDB.
- Версии Clang и LLVM , поставляемые с Visual Studio, обновлены до версии 13.
- Интеграция Visual Studio с CMake активна, только когда CMakeLists.txt определяется в корне открытой рабочей области. Если объект CMakeLists.txt определен на другом уровне рабочей области, вам будет предложено активировать интеграцию CMake Visual Studio с уведомлением.
- Новые представления, позволяющие проверять и взаимодействовать с периферийными регистрами в микроконтроллерах и объектах операционных систем реального времени (ОСРВ), доступных с помощью отладки>регистров Windows Embedded>
- Добавлено новое представление цепочек для проектов ОСРВ, доступное в меню Отладка>Окна>Объекты ОСРВ. Дополнительные сведения см. в статье Embedded Software Development in Visual Studio.
Новые возможности C++ в Visual Studio версии 17.0
Сводка по новым функциям и исправлениям ошибок в Visual Studio см. в заметках о выпуске Visual Studio 2022 версии 17.0.
- Visual Studio IDE, devenv.exe , теперь является собственным 64-разрядным приложением.
- Набор инструментов MSVC теперь по умолчанию используется для хэширования источника SHA-256 в отладочных записях. Ранее набор инструментов использовал MD5 для хэширования источника по умолчанию.
- Средства сборки версии 143 теперь доступны благодаря установщику Visual Studio, а также в автономных средствах сборки.
Горячая перезагрузка для машинного кода C++
- Горячая перезагрузка для C++ позволяет вносить в выполняемое приложение изменения кода разных типов и применять их без необходимости приостанавливать его с помощью точки останова или аналогичного средства.
В Visual Studio 2022 при запуске приложения в отладчике можно использовать кнопку горячей перезагрузки для внесения изменений во время выполнения приложения. Этот интерфейс работает на основе собственного режима «Изменить и продолжить». Дополнительные сведения о поддерживаемых изменениях см. по ссылке Изменить и продолжить (C++).
- Горячая перезагрузка теперь поддерживает проекты CMake и OpenFolder.
Поддержка WSL2
- Теперь вы можете выполнять сборку и отладку собственного кода в WSL2 без установления SSH-подключения. Поддерживаются кросс-платформенные проекты CMake и проекты Linux на основе MSBuild.
Улучшенная поддержка CMake
- Обновлена версия CMake, поставляемая с Visual Studio до версии 3.21. Дополнительные сведения о доступных функциях этой версии см. в заметках о выпуске CMake 3.21.
- Страницы обзора CMake обновляются для поддержки CMakePresets.json .
- Теперь вы можете настраивать проекты CMake и выполнять их сборку с помощью CMake 3.21 и CMakePresets.json версии 3.
- Visual Studio теперь поддерживает параметр buildPresets.targets в CMakePresets.json . Он позволяет создать набор целевых объектов в проекте CMake.
- Меню «Проект» в проектах CMake упрощается и предоставляет параметры «Удалить кэш и перенастройку» и «Просмотреть кэш».
- Реализован параметр компилятора /scanDependencies для перечисления зависимостей модуля C++20 для проектов CMake, как описано в P1689R5. Это шаг к поддержке создания проектов на основе модулей с помощью CMake, и мы работаем над реализацией этой поддержки в последующих выпусках.
Улучшения стандартной библиотеки
Здесь выделены улучшения стандартной библиотеки (STL). Полный список новых функций, изменений, исправлений ошибок и улучшений производительности см. в журнале изменений команды STL.
- Добавлены визуализаторы отладки для улучшения отображения следующих типов: source_location , bind_front() , u8string (и его итераторы), default_sentinel_t , unreachable_sentinel_t , ranges::empty_view , ranges::single_view , ranges::iota_view (и его итератор или граничная метка), ranges::ref_view , thread , thread::id , jthread и filesystem::path .
- Добавлен [[nodiscard]] в семейство функций stoi() в и в различные функции в , такие как функции-члены collate , has_facet() и семейства isalnum() и tolower() .
- P0980R1 Создан std::string constexpr в VS 2019 версии 16.10. Теперь поддерживается для Clang.
- P1004R2 Создан std::vector constexpr в VS 2019 версии 16.10. Теперь поддерживается для Clang.
Выделенные функции C++23
- P1048R1 Добавлен is_scoped_enum , новый признак для стандартной библиотеки C++, который определяет, является ли тип ограниченным перечислением.
- P1132R7 out_ptr() , inout_ptr()
- P1679R3 contains() для basic_string и basic_string_view
- P1682R3 to_underlying() для перечислений
- P2162R2 Разрешено наследование от std::variant .
- P2166R1 Запрещено создание basic_string и basic_string_view из nullptr . Это критическое изменение исходного кода. Код с ранее неопределенным поведением в среде выполнения теперь отклоняется с ошибками компилятора.
- P2186R2 Удалена поддержка сборки мусора. Это изменение удаляет declare_reachable , undeclare_reachable , declare_no_pointers , undeclare_no_pointers , get_pointer_safety . Ранее эти функции не действовали.
Выделенные улучшения производительности
- теперь определяет, когда идет запись в back_insert_iterator для basic_string или vector , и быстрее вызывает insert() в end() контейнера.
- Улучшена производительность std::find() и std::count() для vector в 19 и 26 раз (не на соответствующее число процентов).
- Улучшена производительность std::count() для vector .
- Производительность std::byte теперь такая же, как у unsigned char в reverse() и variant::swap() .
Поддержка Clang и LLVM
- Средства LLVM, предоставляемые Visual Studio, обновляются до LLVM 12. Дополнительные сведения см. в заметках о выпуске LLVM.
- Поддержка Clang-cl была обновлена до LLVM 12.
- Теперь вы можете выполнять отладку процессов, работающих на удаленных системах из Visual Studio, с помощью LLDB.
C++ AMP не рекомендуется
- Заголовки C++ AMP теперь являются нерекомендуемыми. Включение в проект C++ приводит к возникновению ошибок сборки. Чтобы заглушить эти ошибки, определите _SILENCE_AMP_DEPRECATION_WARNINGS . Дополнительные сведения см. по ссылкам об объявлении AMP нерекомендуемым.
Улучшения IntelliSense
- Внесены улучшения в IntelliSense для C++, касающиеся навигации и выделения синтаксиса в типах из импортированных модулей и блоков заголовков. IntelliSense — это активная область вложений для нас. Помогите нам стать лучше: поделитесь своим отзывом в сообществе разработчиков, перейдя в меню Справка>Отправить отзыв.
- Улучшена производительность IntelliSense для C++ за счет оптимизации использования кэшированных заголовков и доступа к базе данных символов, что позволило уменьшить время загрузки для перехода к коду.
- Анализатор кода IntelliSense для C++ теперь включен по умолчанию. Он выдает мгновенные предложения во время ввода, а также предложения по исправлению для распространенных ошибок в коде.
- C++ IntelliSense для проектов CMake теперь работает при использовании заготовки с отображаемым именем.
Обновления рабочей нагрузки C++
- В рабочей нагрузке Разработка мобильных приложений на языке C++ произведено обновление до пакета NDK r21 LTS.
- Разработка игр с помощью рабочей нагрузки C++ теперь устанавливает последнюю версию Unreal Engine с поддержкой Visual Studio 2022.
Улучшения анализа кода
- Анализ кода теперь обеспечивает принудительную проверку возвращаемых значений функций с аннотациями _Check_return_ или _Must_inspect_result_ .
- Обнаружение разыменовки указателя NULL улучшено в нашем средстве анализа кода.
- Добавлена поддержка gsl::not_null для анализа кода.
- Поддержка libFuzzer с параметром компилятора /fsanitize=fuzzer .
Заметки о выпусках более ранних версий
Также доступны заметки о выпусках более ранних версий C++. Сведения о новых возможностях C++ в Visual Studio 2019 см в статье Новые возможности C++ в Visual Studio 2019. Сведения о новых возможностях C++ в Visual Studio 2017 см в статье Новые возможности C++ в Visual Studio 2017. Сведения о новых возможностях в более ранних версиях см. в статье Visual C++. Новые возможности в версиях с 2003 по 2015.
Известные проблемы
C++ IntelliSense
Дополнительные сведения о других открытых проблемах и доступных решениях для C++ в Visual Studio 2022 см. в списке проблем для сообщества разработчиков C++.
Отзывы и предложения
Мы хотели бы услышать ваше мнение! Вы можете сообщить о проблеме или предложить функцию с помощью значка «Отправить отзыв» в правом верхнем углу установщика или Visual Studio IDE или в меню Справка>Отправить отзыв. Вы можете отслеживать проблемы в сообществе разработчиков Visual Studio, позволяющем добавлять комментарии или искать решения. Кроме того, вам доступна бесплатная поддержка в чате по вопросам с установкой.
Блоги
Воспользуйтесь преимуществами аналитических сведений и рекомендаций, доступных на сайте блогов разработчиков Майкрософт, чтобы оставаться в курсе всех новых выпусков . В блогах можно найти записи, подробно изучающие разнообразные функции. Блог команды C++ и блог Visual Studio имеют особый интерес.
Пошаговое руководство. Разработка на основе тестов с помощью тестовой Обозреватель
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code 
Создавайте модульные тесты, чтобы обеспечить правильную работу кода с помощью добавочных изменений кода. Существует несколько платформ, которые можно использовать для написания модульных тестов, в том числе разработанные третьими сторонами. Некоторые тестовые среды специализируются на тестировании на различных языках или платформах. Обозреватель тестов предоставляет единый интерфейс модульных тестов для любых таких платформ. Дополнительные сведения об использовании обозревателя тестов см. в разделе Выполнение модульных тестов с помощью обозревателя тестов и Вопросы и ответы по обозревателю тестов.
В данном пошаговом руководстве показано, как разработать тестируемый метод в C# с помощью платформы тестирования Microsoft (MSTest). Можно легко адаптировать его для других языков или других тестовых платформ, например NUnit. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков.
Создание теста и создание кода

- Создайте проекта C# Библиотека классов (.NET Standard). Данный проект будет содержать код, который мы хотим протестировать. Назовите проект MyMath.
- В том же решении добавьте новый тестовый проект MSTest. Начиная с Visual Studio 2019 версии 16.9, название шаблона проекта MSTest изменено с Проект тестов MSTest (.NET Core) на Проект модульного теста. Назовите тестовый проект MathTests.
- Напишите простой метод теста, который проверяет результат, полученный для конкретных входных данных. Добавьте в класс UnitTest1 следующий код.
[TestMethod] public void BasicRooterTest() < // Create an instance to test: Rooter rooter = new Rooter(); // Define a test input and output value: double expectedResult = 2.0; double input = expectedResult * expectedResult; // Run the method under test: double actualResult = rooter.SquareRoot(input); // Verify the result: Assert.AreEqual(expectedResult, actualResult, delta: expectedResult / 100); > - Создайте тип на основе кода теста.
- Установите курсор на Rooter , а затем в меню лампочки выберите Создать тип «Rooter»>Создать новый тип.

- В диалоговом окне Создать тип установите для параметра Проект значение MyMath, проект библиотеки классов, и нажмите OK.

- Установите курсор на Rooter , а затем в меню лампочки выберите Создать тип «Rooter»>Создать новый тип.
- Создайте метод из кода теста. Установите курсор на SquareRoot , а затем в меню лампочки выберите Создать метод Rooter.SquareRoot.
- Выполните модульный тест.
- Чтобы открыть Обозреватель тестов, в меню Тест выберите Windows>Обозреватель тестов.
- В обозревателе тестов выберите Запустить все, чтобы запустить тест.
Выполняется сборка решения, тест запускается и завершается ошибкой.

- Выберите имя теста. Дополнительные сведения о тесте появятся на панели Сводка теста.
- Перейдите по верхней ссылке в разделе Трассировка стека, чтобы перейти к расположению, в котором произошел сбой теста.
- В файле Class1.cs улучшите код SquareRoot :
На данном этапе создан тест и заглушка, которые будут изменены таким образом, что тест будет успешно пройден.
Проверка изменения кода
public double SquareRoot(double input) < return input / 2; >
- В обозревателе тестов выберите Запустить все. Выполняется сборка решения, тест запускается и завершается успешно.
- В тестовом классе добавьте следующий тест, который использует диапазон входных значений:
Расширение диапазона входных данных
Для уверенности, что код работает во всех случаях, добавьте тесты, которые используют более широкий диапазон входных значений.
Избегайте изменения существующих успешно выполненных тестов. Вместо этого добавьте новые тесты. Изменяйте существующие тесты только в тех случаях, когда меняются пользовательские требования. Такой подход позволяет не потерять существующие функциональные возможности при работе с расширенным кодом.
[TestMethod] public void RooterValueRange() < // Create an instance to test. Rooter rooter = new Rooter(); // Try a range of values. for (double expected = 1e-8; expected < 1e+8; expected *= 3.2) < RooterOneValue(rooter, expected); >> private void RooterOneValue(Rooter rooter, double expectedResult) < double input = expectedResult * expectedResult; double actualResult = rooter.SquareRoot(input); Assert.AreEqual(expectedResult, actualResult, delta: expectedResult / 1000); >public double SquareRoot(double input) < double result = input; double previousResult = -input; while (Math.Abs(previousResult - result) >result / 1000) < previousResult = result; result = result - (result * result - input) / (2 * result); >return result; >Добавление тестов для исключительных случаев
- Добавьте новый тест для отрицательных входных значений:
[TestMethod] public void RooterTestNegativeInput() < Rooter rooter = new Rooter(); Assert.ThrowsException(() => rooter.SquareRoot(-1)); >public double SquareRoot(double input) < if (input .Рефакторинг тестируемого кода
Выполните рефакторинг кода, но не изменяйте тесты.
Рефакторинг — это изменение, которое делает код более производительным или более понятным. Это действие не предназначено для изменения поведения кода, поэтому тесты не изменяются.
Рекомендуется выполнять рефакторинг отдельно от расширения функциональности. Неизменяемость тестов уменьшает шансы случайных ошибок во время рефакторинга.
- Измените строку, которая вычисляет result в методе SquareRoot , следующим образом:
public double SquareRoot(double input) < if (input double result = input; double previousResult = -input; while (Math.Abs(previousResult - result) > result / 1000) < previousResult = result; result = (result + input / result) / 2; //was: result = result - (result * result - input) / (2*result); >return result; >
- Выберите Выполнить все и убедитесь, что все тесты по-прежнему завершаются успехом.
