File: Wix\WixToolsetConfiguration.cs
Web Access
Project: Microsoft.DotNet.Build.Tasks.Workloads.csproj (Microsoft.DotNet.Build.Tasks.Workloads)
// 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;

namespace Microsoft.DotNet.Build.Tasks.Workloads.Wix;

/// <summary>
/// Defines the WiX toolset to use for building an MSI.
/// </summary>
public class WixToolsetConfiguration
{
    private List<string> _extensions = new();

    /// <summary>
    /// File system path for wix.exe
    /// </summary>
    public string CliPath
    {
        get;
        set;
    }

    /// <summary>
    /// File system path for heat.exe
    /// </summary>
    public string HeatPath
    {
        get;
        set;
    }

    /// <summary>
    /// Collection of extensions to pass to the CLI when building.
    /// </summary>
    public IEnumerable<string> Extensions => _extensions;

    public void AddExtensions(string[] extensions)
    {
        _extensions.AddRange(extensions);
    }

    /// <summary>
    /// Creates a new <see cref="WixToolsetConfiguration"/>.
    /// </summary>
    /// <param name="cliPath">The file system path for the CLI (wix.exe).</param>
    /// <param name="heatPath">The file system path for Heat (heat.exe).</param>
    /// <param name="extensions">File system paths for WiX extensions to include.</param>
    /// <returns></returns>
    public static WixToolsetConfiguration Create(string cliPath, string heatPath, params string[] extensions)
    {
        var config = new WixToolsetConfiguration
        {
            CliPath = cliPath,
            HeatPath = heatPath,
        };

        config.AddExtensions(extensions);

        return config;
    }
}