File: Graph\ProjectGraphOptions.cs
Web Access
Project: src\msbuild\src\Build\Microsoft.Build.csproj (Microsoft.Build)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Generic;
using Microsoft.Build.Evaluation;

namespace Microsoft.Build.Graph
{
    /// <summary>
    /// Represents the mode to use when constructing a <see cref="ProjectGraph"/>.
    /// </summary>
    public enum ProjectGraphMode
    {
        /// <summary>
        /// Loads only the projects needed for a build, as specified by the entry points. This is the default mode.
        /// </summary>
        Default = 0,

        /// <summary>
        /// Loads a complete representation of the graph, even if they are not needed for the build.
        /// </summary>
        Full = 1,
    }

    /// <summary>
    /// Represents options to use when constructing a <see cref="ProjectGraph" />.
    /// </summary>
    public readonly struct ProjectGraphOptions()
    {
        /// <summary>
        /// The degree of parallelism to use when constructing the graph. Defaults to the number of logical cores on the machine.
        /// </summary>
        public int DegreeOfParallelism { get; init; } = NativeMethodsShared.GetLogicalCoreCount();

        /// <summary>
        /// A list of <see cref="ProjectGraphEntryPoint" /> objects representing the entry points to use when constructing the graph.
        /// </summary>
        public required IEnumerable<ProjectGraphEntryPoint> EntryPoints { get; init; }

        /// <summary>
        /// The <see cref="ProjectGraphMode" /> to use when constructing the graph. Defaults to <see cref="ProjectGraphMode.Default" />.
        /// </summary>
        public ProjectGraphMode Mode { get; init; } = ProjectGraphMode.Default;

        /// <summary>
        /// The <see cref="ProjectCollection" /> to load projects into when constructing the graph. Defaults to <see cref="ProjectCollection.GlobalProjectCollection" />.
        /// </summary>
        public ProjectCollection ProjectCollection { get; init; } = ProjectCollection.GlobalProjectCollection;

        /// <summary>
        /// An optional <see cref="ProjectGraph.ProjectInstanceFactoryFunc" /> to use when evaluating individual projects in the graph.
        /// </summary>
        public ProjectGraph.ProjectInstanceFactoryFunc? ProjectInstanceFactoryFunc { get; init; }
    }
}