Use the MSBuild API

MSBuild provides a public API surface so that your program can perform builds and inspect projects. Recent versions of the MSBuild APIs can be found in the following NuGet packages:

Package name Description
Microsoft.Build Contains the Microsoft.Build assembly which is used to create, edit, and evaluate MSBuild projects.
Microsoft.Build.Framework Contains the common MSBuild framework assembly used by other MSBuild assemblies.
Microsoft.Build.Runtime Delivers a complete executable copy of MSBuild. Reference this package only if your application needs to load projects or execute in-process builds without requiring installation of MSBuild. Successfully evaluating projects using this package requires aggregating additional components (like the compilers) into an application directory.
Microsoft.Build.Tasks.Core Contains the Microsoft.Build.Tasks assembly which implements the commonly used tasks of MSBuild.
Microsoft.Build.Utilities.Core Contains the Microsoft.Build.Utilities assembly which is used to implement custom MSBuild tasks.

In addition, NuGet also hosts a legacy assembly, Microsoft.Build.Engine, which is deprecated.

There are several different versions of the MSBuild API, and for versions 15 and 16, there are two distinct forms of the assemblies in the NuGet packages, one compiled with the .NET Framework, and another compiled with .NET Core, which is a subset of the .NET Framework API surface. The .NET Core version of MSBuild is used when you invoke the dotnet command, and when using MSBuild on Mac and Linux systems.

Documentation for the MSBuild API can be found by using the .NET API Browser, or by browsing the namespaces in the following list.

Namespace Applies To Description
Microsoft.Build.Construction All Contains types that the MSBuild object model uses to construct project roots with unevaluated values. Each project root corresponds to a project or targets file.
Microsoft.Build.Definition All Contains the ProjectOptions class, which supports project construction.
Microsoft.Build.Evaluation All Contains types that the MSBuild object model uses to evaluate projects. Each project is associated with one or more project roots.
Microsoft.Build.Evaluation.Context All Contains the EvaluationContext class, used to store evaluation state across calls.
Microsoft.Build.Exceptions All Contains exception types that may be thrown during the build process.
Microsoft.Build.Execution All Contains types that the MSBuild object model uses to build projects.
Microsoft.Build.Framework All Contains the types that define how tasks and loggers interact with the MSBuild engine.
Microsoft.Build.Framework.Profiler All Contains the types that support performance profiling.
Microsoft.Build.Framework.XamlTypes .NET Framework only Contains classes used to represent XAML types parsed from files, rules, and other sources.
Microsoft.Build.Globbing All Contains classes that support wildcard processing.
Microsoft.Build.Globbing.Extensions All Contains types that support extensions to wildcard processing.
Microsoft.Build.Graph All Contains types that support the -graph MSBuild switch.
Microsoft.Build.Logging All Contains types used for logging the progress of a build.
Microsoft.Build.ObjectModelRemoting All Contains types that support remoting in MSBuild.
Microsoft.Build.Tasks All Contains the implementation of all tasks shipping with MSBuild.
Microsoft.Build.Tasks.Deployment.Bootstrapper .NET Framework only Contains classes used internally by MSBuild.
Microsoft.Build.Tasks.Deployment.ManifestUtilities .NET Framework only Contains classes that MSBuild uses.
Microsoft.Build.Tasks.Hosting All Contains classes used internally by MSBuild.
Microsoft.Build.Tasks.Xaml .NET Framework only Contains classes related to XAML build tasks.
Microsoft.Build.Utilities All Contains helper classes that you can use to create your own MSBuild loggers and tasks.
Namespace Applies To Description
Microsoft.Build.Construction All Contains types that the MSBuild object model uses to construct project roots with unevaluated values. Each project root corresponds to a project or targets file.
Microsoft.Build.Definition All Contains the ProjectOptions class, which supports project construction.
Microsoft.Build.Evaluation All Contains types that the MSBuild object model uses to evaluate projects. Each project is associated with one or more project roots.
Microsoft.Build.Evaluation.Context All Contains the EvaluationContext class, used to store evaluation state across calls.
Microsoft.Build.Exceptions All Contains exception types that may be thrown during the build process.
Microsoft.Build.Execution All Contains types that the MSBuild object model uses to build projects.
Microsoft.Build.Framework All Contains the types that define how tasks and loggers interact with the MSBuild engine.
Microsoft.Build.Framework.Profiler All Contains the types that support performance profiling.
Microsoft.Build.Framework.XamlTypes .NET Framework only Contains classes used to represent XAML types parsed from files, rules, and other sources.
Microsoft.Build.Globbing All Contains classes that support wildcard processing.
Microsoft.Build.Globbing.Extensions All Contains types that support extensions to wildcard processing.
Microsoft.Build.Graph All Contains types that support the -graph MSBuild switch.
Microsoft.Build.Logging All Contains types used for logging the progress of a build.
Microsoft.Build.ObjectModelRemoting All Contains types that support remoting in MSBuild.
Microsoft.Build.Tasks All Contains the implementation of all tasks shipping with MSBuild.
Microsoft.Build.Tasks.Deployment.Bootstrapper .NET Framework only Contains classes used internally by MSBuild.
Microsoft.Build.Tasks.Deployment.ManifestUtilities .NET Framework only Contains classes that MSBuild uses.
Microsoft.Build.Tasks.Hosting All Contains classes used internally by MSBuild.
Microsoft.Build.Tasks.Xaml .NET Framework only Contains classes related to XAML build tasks.
Microsoft.Build.Utilities All Contains helper classes that you can use to create your own MSBuild loggers and tasks.

In the previous table, All in the Applies To column means the types in the namespace are available in both the .NET Framework and the .NET Core versions of the MSBuild API.