MSBuildMSBuild

Microsoft Build Engine представляет собой платформу для сборки приложений.The Microsoft Build Engine is a platform for building applications. Компонент MSBuild обеспечивает для файла проекта схему XML, определяющую способы, используемые платформой сборки для обработки и сборки приложений.This engine, which is also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software. Visual Studio использует MSBuild, но MSBuild не зависит от Visual Studio.Visual Studio uses MSBuild, but MSBuild doesn't depend on Visual Studio. Вызывая msbuild.exe для файла проекта или решения, можно контролировать и создавать в продукты в средах без установленного экземпляра Visual Studio.By invoking msbuild.exe on your project or solution file, you can orchestrate and build products in environments where Visual Studio isn't installed.

Visual Studio использует MSBuild для загрузки и сборки управляемых проектов.Visual Studio uses MSBuild to load and build managed projects. Файлы проектов в Visual Studio (с расширением CSPROJ, VBPROJ, VCXPROJ) содержат код XML MSBuild, который выполняется при создании проекта с помощью интегрированной среды разработки.The project files in Visual Studio (.csproj, .vbproj, .vcxproj, and others) contain MSBuild XML code that executes when you build a project by using the IDE. Проекты Visual Studio импортируют все необходимые параметры и процессы сборки для выполнения стандартной работы по разработке, но их можно расширять и изменять в Visual Studio или в редакторе XML.Visual Studio projects import all the necessary settings and build processes to do typical development work, but you can extend or modify them from within Visual Studio or by using an XML editor.

Сведения об MSBuild для C++ см. в разделе MSBuild (C++).For information about MSBuild for C++, see MSBuild (C++).

В следующих примерах показаны случаи, когда сборки можно запускать с помощью вызова MSBuild из командной строки, а не интегрированной среды разработки Visual Studio.The following examples illustrate when you might run builds by invoking MSBuild from the command line instead of the Visual Studio IDE.

  • Среда Visual Studio не установлена.Visual Studio isn't installed. (Скачайте MSBuild без Visual Studio.)(Download MSBuild without Visual Studio.)

  • Необходимо использовать 64-разрядную версию MSBuild.You want to use the 64-bit version of MSBuild. Эта версия MSBuild обычно не нужна, но она позволяет MSBuild обращаться к большему объему памяти.This version of MSBuild is usually unnecessary, but it allows MSBuild to access more memory.

  • Сборку требуется выполнять в нескольких процессах.You want to run a build in multiple processes. Однако можно использовать интегрированную среду разработки, чтобы добиться того же результата для проектов на C++ и C#.However, you can use the IDE to achieve the same result on projects in C++ and C#.

  • Требуется изменить систему сборки.You want to modify the build system. Например, может потребоваться выполнить следующие действия:For example, you might want to enable the following actions:

    • предварительная обработка файлов перед их компиляцией;Preprocess files before they reach the compiler.

    • копирование выходных данных сборки в другое место;Copy the build outputs to a different place.

    • создание сжатых файлов из выходных данных сборки;Create compressed files from build outputs.

    • пост-обработка.Do a post-processing step. Например, может потребоваться присвоить сборке другой номер версии.For example, you might want to stamp an assembly with a different version.

Можно написать код в интегрированной среде разработки Visual Studio, но запускать сборку с помощью MSBuild.You can write code in the Visual Studio IDE but run builds by using MSBuild. В качестве альтернативы можно выполнять сборку кода в интегрированной среде разработки на компьютере разработчика, но запускать MSBuild из командной строки для сборки и интеграции кода, полученного от нескольких разработчиков.As another alternative, you can build code in the IDE on a development computer but run MSBuild from the command line to build code that's integrated from multiple developers. Для сборки проектов .NET Core можно также применять интерфейс командной строки (CLI) .NET Core, использующий MSBuild.You can also use the .NET Core command-line interface (CLI), which uses MSBuild, to build .NET Core projects.

Примечание

С помощью Azure Pipelines можно автоматически компилировать, тестировать и развертывать приложение.You can use Azure Pipelines to automatically compile, test, and deploy your application. Система сборки может автоматически запускать сборку, когда разработчики возвращают код (например, как часть стратегии непрерывной интеграции) или по расписанию (например, выполнять ежедневную ночную тестовую сборку).Your build system can automatically run builds when developers check in code (for example, as part of a Continuous Integration strategy) or according to a schedule (for example, a nightly Build Verification Test build). Azure Pipelines компилирует код с использованием MSBuild.Azure Pipelines compiles your code by using MSBuild. Дополнительные сведения см. в описании Azure Pipelines.For more information, see Azure Pipelines.

В статье представлен обзор MSBuild.This article provides an overview of MSBuild. Вводную информацию см. в статье Пошаговое руководство. Использование MSBuild.For an introductory tutorial, see Walkthrough: Using MSBuild.

Использование MSBuild в командной строкеUse MSBuild at a command prompt

Чтобы запустить MSBuild из командной строки, передайте файл проекта в MSBuild.exe при использовании соответствующих параметров командной строки.To run MSBuild at a command prompt, pass a project file to MSBuild.exe, together with the appropriate command-line options. Параметры командной строки позволяют задавать свойства, выполнять определенные целевые объекты и задавать другие параметры, управляющие процессом построения.Command-line options let you set properties, execute specific targets, and set other options that control the build process. Например, используя следующий синтаксис командной строки, можно создать файл MyProj.proj со свойством Configuration, для которого задается значение Debug.For example, you would use the following command-line syntax to build the file MyProj.proj with the Configuration property set to Debug.

MSBuild.exe MyProj.proj -property:Configuration=Debug

Дополнительные сведения о параметрах командной строки MSBuild см. в статье Справочник по командной строке MSBuild.For more information about MSBuild command-line options, see Command-line reference.

Важно!

Перед загрузкой проекта определите, можно ли доверять коду.Before you download a project, determine the trustworthiness of the code.

Файл проектаProject file

MSBuild использует открытый и расширяемый формат файлов проекта на базе XML.MSBuild uses an XML-based project file format that's straightforward and extensible. Формат файла проекта MSBuild позволяет разработчикам описывать создаваемые элементы, а также способы их построения для разных операционных систем и конфигураций.The MSBuild project file format lets developers describe the items that are to be built, and also how they are to be built for different operating systems and configurations. Кроме того, формат файла проекта позволяет разработчикам создавать многократно используемые правила сборки, которые можно разложить на отдельные файлы, чтобы сборки могли выполняться единообразно в различных проектах в составе соответствующего продукта.In addition, the project file format lets developers author reusable build rules that can be factored into separate files so that builds can be performed consistently across different projects in the product.

В следующих разделах описаны некоторые из базовых элементов формата файла проекта MSBuild.The following sections describe some of the basic elements of the MSBuild project file format. См. дополнительные сведения о создании базового файла проекта MSBuild с нуля.For a tutorial about how to create a basic project file, see Walkthrough: Creating an MSBuild project file from scratch.

СвойстваProperties

Свойства представляют пары ключ-значение, с помощью которых выполняется настройка построения.Properties represent key/value pairs that can be used to configure builds. Для объявления свойства создается элемент с таким же именем как у свойства, который является дочерним по отношению к элементу PropertyGroup.Properties are declared by creating an element that has the name of the property as a child of a PropertyGroup element. Например, в следующем коде создается свойство BuildDir со значением Build.For example, the following code creates a property named BuildDir that has a value of Build.

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

Свойство можно определить условно, задав атрибут Condition в элементе.You can define a property conditionally by placing a Condition attribute in the element. Содержимое условных элементов игнорируется, пока значение условия не станет true.The contents of conditional elements are ignored unless the condition evaluates to true. В следующем примере определяется элемент Configuration, если он еще не был определен.In the following example, the Configuration element is defined if it hasn't yet been defined.

<Configuration  Condition=" '$(Configuration)' == '' ">Debug</Configuration>

Для создания ссылок на свойства в файле проекта используется синтаксис $(<имя_свойства>).Properties can be referenced throughout the project file by using the syntax $(<PropertyName>). Например, к свойствам из предыдущих примеров можно обращаться с помощью конструкций $(BuildDir) и $(Configuration).For example, you can reference the properties in the previous examples by using $(BuildDir) and $(Configuration).

Дополнительные сведения о свойствах см. в разделе Свойства MSBuild.For more information about properties, see MSBuild properties.

ЭлементыItems

Элементы — это входные данные для системы сборки, как правило, представляющие файлы.Items are inputs into the build system and typically represent files. Элементы группируются в типы на основе определяемых пользователем имен элементов.Items are grouped into item types based on user-defined item names. Эти типы элементов можно использовать в качестве параметров для задач, в которых с помощью отдельных элементов выполняются этапы процесса построения.These item types can be used as parameters for tasks, which use the individual items to perform the steps of the build process.

Для объявления элементов в файле проекта создается элемент с именем типа элементов, являющийся дочерним по отношению к элементу ItemGroup.Items are declared in the project file by creating an element that has the name of the item type as a child of an ItemGroup element. Например, с помощью приведенного ниже кода создается тип элементов с именем Compile, в который входят два файла.For example, the following code creates an item type named Compile, which includes two files.

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

Для создания ссылок на типы элементов в файле проекта используется синтаксис @(<тип_элемента>).Item types can be referenced throughout the project file by using the syntax @(<ItemType>). Например, ссылка на тип элементов в этом примере выглядела бы следующим образом: @(Compile).For example, the item type in the example would be referenced by using @(Compile).

В MSBuild имена элементов и атрибутов задаются с учетом регистра.In MSBuild, element and attribute names are case-sensitive. А имена свойств, элементов (item) и метаданных — нет.However, property, item, and metadata names are not. В следующем примере создается тип элементов Compile, comPile или любого другого варианта написания, и типу элементов присваивается значение "one.cs;two.cs".The following example creates the item type Compile, comPile, or any other case variation, and gives the item type the value "one.cs;two.cs".

<ItemGroup>
  <Compile Include="one.cs" />
  <comPile Include="two.cs" />
</ItemGroup>

При объявлении элементов можно использовать подстановочные знаки; элементы могут содержать дополнительные метаданные для расширенных сценариев построения.Items can be declared by using wildcard characters and may contain additional metadata for more advanced build scenarios. Дополнительные сведения об элементах см. в разделе Элементы.For more information about items, see Items.

ЗадачиTasks

Задачи — это блоки исполняемого кода, с помощью которых в проектах MSBuild выполняются операции построения.Tasks are units of executable code that MSBuild projects use to perform build operations. Например, в задаче может выполняться компиляция входных файлов или запускаться внешняя программа.For example, a task might compile input files or run an external tool. Созданные задачи могут использоваться совместно и многократно разными разработчиками в различных проектах.Tasks can be reused, and they can be shared by different developers in different projects.

Алгоритм выполнения задачи записан в управляемом коде и сопоставлен с MSBuild с помощью элемента UsingTask.The execution logic of a task is written in managed code and mapped to MSBuild by using the UsingTask element. Для создания собственной задачи можно разработать управляемый тип, реализующий интерфейс ITask.You can write your own task by authoring a managed type that implements the ITask interface. Дополнительные сведения о способах создания задач см. в руководстве по написанию задач.For more information about how to write tasks, see Task writing.

MSBuild включает стандартные задачи, которые можно изменять в соответствии с требованиями.MSBuild includes common tasks that you can modify to suit your requirements. Примеры: Copy — копирование файлов, MakeDir — создание каталогов, Csc — компиляция файлов исходного кода Visual C#.Examples are Copy, which copies files, MakeDir, which creates directories, and Csc, which compiles Visual C# source code files. Список доступных задач и сведения об их использовании см. в справочнике по задачам.For a list of available tasks together with usage information, see Task reference.

Задача выполняется в файле проекта MSBuild путем создания элемента с таким же именем как у задачи в виде дочернего элемента по отношению к элементу Target.A task is executed in an MSBuild project file by creating an element that has the name of the task as a child of a Target element. Задачи, как правило, принимают параметры, которые передаются как атрибуты элемента.Tasks typically accept parameters, which are passed as attributes of the element. В качестве параметров можно использовать свойства и элементы MSBuild.Both MSBuild properties and items can be used as parameters. Например, с помощью следующего кода вызывается задача MakeDir и ей передается значение свойства BuildDir, объявленного в предыдущем примере.For example, the following code calls the MakeDir task and passes it the value of the BuildDir property that was declared in the earlier example.

<Target Name="MakeBuildDirectory">
    <MakeDir  Directories="$(BuildDir)" />
</Target>

Дополнительные сведения о задачах см. в разделе Задачи.For more information about tasks, see Tasks.

Целевые объектыTargets

Целевые объекты позволяют группировать задачи в определенном порядке и использовать разделы файла проекта в качестве точек входа в процесс построения.Targets group tasks together in a particular order and expose sections of the project file as entry points into the build process. Целевые объекты часто группируются в логические разделы, чтобы повысить удобочитаемость и расширяемость.Targets are often grouped into logical sections to increase readability and to allow for expansion. Благодаря разбиению действий построения на множество целевых объектов можно вызывать один фрагмент процесса построения из других целевых объектов, не создавая при этом копии соответствующего раздела кода в каждом целевом объекте.Breaking the build steps into targets lets you call one piece of the build process from other targets without copying that section of code into every target. Например, если требуется создать ссылки для нескольких точек входа в процесс сборки, можно создать целевой объект, который выполняет сборку ссылок, и выполнять этот целевой объект из каждой нужной точки входа.For example, if several entry points into the build process require references to be built, you can create a target that builds references and then run that target from every entry point where it's required.

Целевые объекты объявляются в файле проекта с помощью элемента Target.Targets are declared in the project file by using the Target element. Например, с помощью следующего кода создается целевой объект с именем Compile, который затем вызывает задачу Csc со списком элементов, объявленным в предыдущем примере.For example, the following code creates a target named Compile, which then calls the Csc task that has the item list that was declared in the earlier example.

<Target Name="Compile">
    <Csc Sources="@(Compile)" />
</Target>

В более сложных сценариях целевые объекты могут использоваться для описания связей друг с другом и выполнять анализ зависимостей, что позволяет пропускать целые разделы процесса сборки, если такой целевой объект актуален.In more advanced scenarios, targets can be used to describe relationships among one another and perform dependency analysis so that whole sections of the build process can be skipped if that target is up-to-date. Дополнительные сведения о целевых объектах см. в разделе Целевые объекты.For more information about targets, see Targets.

Журналы сборкиBuild logs

Ошибки, предупреждения и сообщения журнала сборки можно выводить на консоль или на другое устройство вывода.You can log build errors, warnings, and messages to the console or another output device. Дополнительные сведения см. в руководствах по получению журналов сборки и ведению журналов в MSBuild.For more information, see Obtaining build logs and Logging in MSBuild.

Использование MSBuild в Visual StudioUse MSBuild in Visual Studio

Visual Studio использует формат файла проекта MSBuild для хранения данных сборки об управляемых объектах.Visual Studio uses the MSBuild project file format to store build information about managed projects. Параметры проекта, добавленные или измененные с помощью интерфейса Visual Studio, отражаются в файле .*proj, который создается для каждого проекта.Project settings that are added or changed by using the Visual Studio interface are reflected in the .*proj file that's generated for every project. Для построения управляемых проектов в Visual Studio используется размещенный экземпляр MSBuild.Visual Studio uses a hosted instance of MSBuild to build managed projects. Это означает, что выполнить построение управляемого проекта можно в Visual Studio или в командной строке (даже при отсутствии Visual Studio), и результаты будут одинаковыми.This means that a managed project can be built in Visual Studio or at a command prompt (even if Visual Studio isn't installed), and the results will be identical.

См. дополнительные сведения об использовании MSBuild в Visual Studio.For a tutorial about how to use MSBuild in Visual Studio, see Walkthrough: Using MSBuild.

Настройка для различных версийMultitargeting

С помощью Visual Studio можно компилировать приложение для его запуска на любой из нескольких версий платформы .NET Framework.By using Visual Studio, you can compile an application to run on any one of several versions of .NET Framework. Например, можно компилировать приложение для запуска в .NET Framework 2.0 на 32-разрядной платформе, а также компилировать то же приложение для запуска в .NET Framework 4.5 на 64-разрядной платформе.For example, you can compile an application to run on .NET Framework 2.0 on a 32-bit platform, and you can compile the same application to run on .NET Framework 4.5 on a 64-bit platform. Возможность компиляции для нескольких платформ называется настройкой для различных версий.The ability to compile to more than one framework is named multitargeting.

Ниже приведены несколько преимуществ настройки для различных версий:These are some of the benefits of multitargeting:

  • Можно разрабатывать приложения, которые предназначены для более ранних версий платформы .NET Framework, например версий 2.0, 3.0 и 3.5.You can develop applications that target earlier versions of .NET Framework, for example, versions 2.0, 3.0, and 3.5.

  • Можно ориентироваться на платформы, отличные от .NET Framework, например на Silverlight.You can target frameworks other than .NET Framework, for example, Silverlight.

  • Можно ориентироваться на профиль платформы, который представляет собой предопределенное подмножество целевой платформы.You can target a framework profile, which is a predefined subset of a target framework.

  • После появления пакета обновления для текущей версии .NET Framework можно выбрать его в качестве целевой платформы.If a service pack for the current version of .NET Framework is released, you could target it.

  • Поддержка различных платформ гарантирует, что приложение использует только те функциональные возможности, которые доступны в целевой версии .NET Framework и платформы.Multitargeting guarantees that an application uses only the functionality that's available in the target framework and platform.

Дополнительные сведения см. в разделе Настройка для различных версий.For more information, see Multitargeting.

См. такжеSee also

ЗаголовокTitle ОписаниеDescription
Пошаговое руководство: Создание файла проекта MSBuild с нуляWalkthrough: Creating an MSBuild project file from scratch Содержит описание способов пошагового создания основного файла проекта путем использования только текстового редактора.Shows how to create a basic project file incrementally, by using only a text editor.
Пошаговое руководство: Использование MSBuildWalkthrough: Using MSBuild Содержит вводную информацию о стандартных блоках MSBuild и описание способов записи, управления и отладки проектов MSBuild без выхода из интегрированной среды разработки Visual Studio.Introduces the building blocks of MSBuild and shows how to write, manipulate, and debug MSBuild projects without closing the Visual Studio IDE.
Основные понятия MSBuildMSBuild concepts Содержит информацию о четырех стандартных блоках MSBuild: свойствах, элементах, целевых объектах и задачах.Presents the four building blocks of MSBuild: properties, items, targets, and tasks.
ЭлементыItems Содержит описание общих понятий, относящихся к формату файлов MSBuild, и способов взаимодействия фрагментов.Describes the general concepts behind the MSBuild file format and how the pieces fit together.
Свойства MSBuildMSBuild properties Содержит вводную информацию о свойствах и коллекциях свойств.Introduces properties and property collections. Свойства представляют собой пары ключ-значение, с помощью которых выполняется настройка сборок.Properties are key/value pairs that can be used to configure builds.
Целевые объектыTargets Содержит объяснение группировки задач в определенном порядке и вызова разделов процесса построения из командной строки.Explains how to group tasks together in a particular order and enable sections of the build process to be called on the command line.
ЗадачиTasks Описывает процесс создания блока исполняемого кода, с помощью которого MSBuild выполняет атомарные операции построения.Shows how to create a unit of executable code that can be used by MSBuild to perform atomic build operations.
УсловияConditions Рассматривает использование атрибута Condition в элементе MSBuild.Discusses how to use the Condition attribute in an MSBuild element.
Дополнительные возможностиAdvanced concepts Содержит информацию о пакетной обработке, выполнении преобразований, использовании нескольких целевых платформ и других дополнительных возможностях.Presents batching, performing transforms, multitargeting, and other advanced techniques.
Ведение журнала в MSBuildLogging in MSBuild Описание возможностей записи в журнал событий, сообщений и ошибок сборки.Describes how to log build events, messages, and errors.
Дополнительные ресурсыAdditional resources Содержит список ресурсов сообщества и службы поддержки с дополнительной информацией о MSBuild.Lists community and support resources for more information about MSBuild.

СправочникReference