Understanding Microsoft Build System – What is MSBuild
MSBuild is perhaps one of the most used but uncredited piece of technology. The Microsoft Build Engine or more known as MSBuild, is a platform for building applications. Chances are that if you have ever used Visual Studio or compiled a .NET based project, you have used it knowingly or un-knowingly. Visual Studio uses MSBuild, but it doesn’t depend on Visual Studio. By invoking msbuild.exe on your project or solution file, you can orchestrate and build products in environments where Visual Studio is not installed. For MSBuild to work properly, you need to use an XML schema that defines how the build platform processes and builds software.
In this blog post, we’ll learn just basics of MSBuild, understanding what it is. Through a series of upcoming posts, we’ll learn how to use the XML schema so that MSBuild can build software as per our needs.
As we discussed above, MSBuild uses an XML-based project file format that is straightforward and extensible. 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.
Role of Visual Studio
Visual Studio normally creates and manages the project files (.csproj,.vbproj, vcxproj, and others) containing MSBuild XML code that executes when you build a project by using the IDE. 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. So most of the time, you would not notice that you are using it. However, it is not required to use visual studio to build source code. You can run MSBuild on a machine which does not have Visual Studio installed fine.
Download MSBuild
Earlier, it used to be installed with .NET framework. However, starting from Visual Studio 2013, you can find MSBuild.exe in the MSBuild folder (%ProgramFiles%\MSBuild on a 32-bit operating system, or %ProgramFiles(x86)%\MSBuild on a 64-bit operating system).
Alternatively, if you have Visual Studio installed, you can use the Visual Studio Command Prompt, which has a path that includes the MSBuild folder.
The latest (as of mid-2017) stand-alone MSBuild installers can be found here: https://www.visualstudio.com/downloads/
Scroll down to “Other Tools and Frameworks” and choose “Build Tools for Visual Studio 2017” (despite the name, it’s for users who don’t want the full IDE).
Alternatively, you can google for “Microsoft Build Tools” and download the latest version available.
Define a basic project file
Since at very basic, it requires a project file to work, you need to pass it to the MSBuild. The simplest MSBuild project file would contain the following XML data:
Above XML code will identify that this is an MSBuild project file. Everything else needs to be placed inside the Project element. In terms of MSBuild XML schema, you would need to define properties, items, targets, etc. When building software applications, you will always need to know two pieces of information: what is being built and what build parameters are being used.
Running MSBuild at command prompt
Once we have created a project file, we can use msbuild at command line along with certain options. Command-line options let you set properties, execute specific targets, and set other options that control the build process. For example, below command tells MSBuild to build MyProj project in Debug configuration mode:
MSBuild.exe MyProj.proj /property:Configuration=Debug
Configure SYSTEM PATH
If you want to be able to run MSBuild from any directory, you need to add MSBuild path to environment variable PATH.
For this, at the command prompt, type set PATH=%PATH%;%ProgramFiles%\MSBuild or set PATH=%PATH%;%ProgramFiles(x86)%\MSBuild depending upon where it is installed.
You can also do the same using GUI. Otherwise, you need to navigate to the directory containing MSBuild and then run it from there.
Использование API MSBuild
MSBuild предоставляет общедоступный интерфейс API, который позволяет программам выполнять сборку и проверять проекты. Последние версии API MSBuild можно найти в следующих пакетах NuGet:
Имя пакета | Description |
---|---|
Microsoft.Build | Содержит сборку Microsoft.Build, которая используется для создания, изменения и вычисления проектов MSBuild. |
Microsoft.Build.Framework | Содержит общую сборку платформы MSBuild, используемую другими сборками MSBuild. |
Microsoft.Build.Runtime | Предоставляет полную исполняемую копию MSBuild. Ссылаться на этот пакет следует только в том случае, если приложению требуется загружать проекты или выполнять внутрипроцессные сборки без установки MSBuild. Для успешного вычисления проектов, использующих этот пакет, необходимо выполнить статистическую обработку дополнительных компонентов (например, компиляторов) в каталоге приложения. |
Microsoft.Build.Tasks.Core | Содержит сборку Microsoft.Build.Tasks, которая реализует часто используемые задачи MSBuild. |
Microsoft.Build.Utilities.Core | Содержит сборку Microsoft.Build.Utilities, которая используется для реализации пользовательских задач MSBuild. |
Кроме того, NuGet также содержит устаревшую сборку Microsoft.Build.Engine, использовать которую не рекомендуется.
Существует несколько различных версий API MSBuild, а для версий 15 и 16 существует две различные формы сборок в пакетах NuGet, одна из которых компилируется с .NET Framework, а другая — с .NET Core, который является подмножеством API .NET Framework. Версия .NET Core MSBuild используется при вызове команды dotnet и при использовании MSBuild в системах Mac и Linux.
Документацию по API MSBuild можно найти с помощью Браузера .NET API или в списке пространств имен, приведенных ниже.
Пространство имен | Применяется к | Description |
---|---|---|
Microsoft.Build.Construction | Все | Содержит типы, используемые объектной моделью MSBuild для создания корней проекта с невычисленными значениями. Каждый корень проекта соответствует файлу проекта или файлу целей построения. |
Microsoft.Build.Definition | Все | Содержит класс ProjectOptions , поддерживающий создание проекта. |
Microsoft.Build.Evaluation | Все | Содержит типы, используемые объектной моделью MSBuild для вычисления проектов. Каждый проект связан с одним или несколькими корнями проекта. |
Microsoft.Build.Evaluation.Context | Все | Содержит класс EvaluationContext , используемый для хранения состояния вычисления во всех вызовах. |
Microsoft.Build.Exceptions | Все | Содержит типы исключений, которые могут выдаваться в процессе сборки. |
Microsoft.Build.Execution | Все | Содержит типы, используемые объектной моделью MSBuild для создания проектов. |
Microsoft.Build.Framework | Все | Содержит типы, определяющие, каким образом задачи и средства ведения журнала взаимодействуют с обработчиком MSBuild. |
Microsoft.Build.Framework.Profiler | Все | Содержит типы, поддерживающие профилирование производительности. |
Microsoft.Build.Framework.XamlTypes | Только .NET Framework | Содержит классы, используемые для представления типов XAML, полученных в результате анализа файлов, правил и других источников. |
Microsoft.Build.Globbing | Все | Содержит классы, поддерживающие обработку подстановочных знаков. |
Microsoft.Build.Globbing.Extensions | Все | Содержит типы, поддерживающие расширения для обработки подстановочных знаков. |
Microsoft.Build.Graph | Все | Содержит типы, поддерживающие параметр -graph MSBuild. |
Microsoft.Build.Logging | Все | Содержит типы, используемые для регистрации хода выполнения сборки. |
Microsoft.Build.ObjectModelRemoting | Все | Содержит типы, поддерживающие удаленное взаимодействие в MSBuild. |
Microsoft.Build.Tasks | Все | Содержит реализацию всех задач, поставляемых с MSBuild. |
Microsoft.Build.Tasks.Deployment.Bootstrapper | Только .NET Framework | Содержит классы, используемые внутри MSBuild. |
Microsoft.Build.Tasks.Deployment.ManifestUtilities | Только .NET Framework | Содержит классы, используемые MSBuild. |
Microsoft.Build.Tasks.Hosting | Все | Содержит классы, используемые внутри MSBuild. |
Microsoft.Build.Tasks.Xaml | Только .NET Framework | Содержит классы, связанные с задачами сборки XAML. |
Microsoft.Build.Utilities | Все | Содержит вспомогательные классы, которые можно использовать для создания собственных средств ведения журнала и задач MSBuild. |
В приведенной выше таблице «Все» в столбце «Применение» означает, что типы в пространстве имен доступны как в .NET Framework, так и в версиях .NET Core для API MSBuild.
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
dotnet / msbuild Public
The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.
License
dotnet/msbuild
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
caf06d1 Sep 12, 2023
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
The Microsoft Build Engine is a platform for building applications. This engine, also known as MSBuild, provides an XML schema for a project file that controls how the build platform processes and builds software. Visual Studio uses MSBuild, but MSBuild can run without 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.
For more information on MSBuild, see the MSBuild documentation on docs.microsoft.com.
The changelog has detailed information about changes made in different releases.
Building MSBuild with Visual Studio 2022 on Windows
For the full supported experience, you will need to have Visual Studio 2022 or higher.
To get started on Visual Studio 2022:
- Install Visual Studio 2022. Select the following Workloads:
- .NET desktop development
- .NET Core cross-platform development
- Ensure long path support is enabled at the Windows level.
- Open a Developer Command Prompt for VS 2022 prompt.
- Clone the source code: git clone https://github.com/dotnet/msbuild
- You may have to download Git first.
- Run .\build.cmd from the root of the repo to build the code. This also restores packages needed to open the projects in Visual Studio.
- Open MSBuild.sln or MSBuild.Dev.slnf in Visual Studio 2022.
This newly-built MSBuild will be located at artifacts\bin\bootstrap\net472\MSBuild\Current\Bin\MSBuild.exe . It may not work for all scenarios, including C++ builds.
Building MSBuild in Unix (Mac & Linux)
MSBuild can be run on Unix systems that support .NET Core. Set-up instructions can be viewed on the wiki: Building Testing and Debugging on .Net Core MSBuild
You can turn on localized builds via the /p:LocalizedBuild=true command line argument. For more information on localized builds and how to make contributions to MSBuild’s translations, see our localization documentation
Interested in contributing?
Before you contribute, please read through the contributing and developer guides to get an idea of what kinds of pull requests we accept.
- Contributing Guide
- Developer Guide on:
- .NET Core
- Full Framework
- Mono
- Note: Please leave a comment asking to be assigned the issue if you want to work on it.
Other ways to contribute
We encourage any contributions you decide to make to the repo!
- MSBuild. Microsoft.Build.CommandLine is the entrypoint for the Microsoft Build Engine (MSBuild.exe).
- Microsoft.Build. The Microsoft.Build namespaces contain types that provide programmatic access to, and control of, the MSBuild engine.
- Microsoft.Build.Framework. The Microsoft.Build.Framework namespace contains the types that define how tasks and loggers interact with the MSBuild engine. For additional information on this component, see our Microsoft.Build.Framework wiki page.
- Microsoft.Build.Tasks. The Microsoft.Build.Tasks namespace contains the implementation of all tasks shipping with MSBuild.
- Microsoft.Build.Utilities. The Microsoft.Build.Utilities namespace provides helper classes that you can use to create your own MSBuild loggers and tasks.
MSBuild is licensed under the MIT license.
About
The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.
При подготовке материала использовались источники:
https://learn.microsoft.com/ru-ru/visualstudio/msbuild/msbuild-api?view=vs-2022
https://github.com/dotnet/msbuild