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

using Microsoft.Build.Framework;
using System.IO;
using System.Text;

namespace Microsoft.DotNet.Build.Tasks.Installers;

[MSBuildMultiThreadableTask]
public class CreateLightCommandPackageDrop : CreateWixCommandPackageDropBase
{
    [Required]
    public string LightCommandWorkingDir { get; set; }
    /// <summary>
    /// Add a FileVersion attribute to each assembly in the MsiAssemblyName table (rarely needed).
    /// </summary>
    public bool Fv { get; set; }
    public string PdbOut { get; set; }
    public string Cultures { get; set; }
    public string WixProjectFile { get; set; }
    public string ContentsFile { get; set; }
    public string OutputsFile { get; set; }
    public string BuiltOutputsFile { get; set; }
    public ITaskItem [] Sice { get; set; }
    public bool SuppressValidation { get;set; }

    // The light command that was originally used to generate the MSI.  This is purely used for informational purposes
    // and to validate that the light command being created by this task is correct (assist with debugging).
    public string OriginalLightCommand { get; set; }

    public override bool Execute()
    {
        string packageDropOutputFolder = Path.Combine(LightCommandWorkingDir, Path.GetFileName(InstallerFile));
        ProcessWixCommand(packageDropOutputFolder, "light.exe", OriginalLightCommand);

        return !Log.HasLoggedErrors;
    }

    protected override void ProcessToolSpecificCommandLineParameters(AbsolutePath packageDropDir, StringBuilder commandString)
    {
        if (Cultures != null)
        {
            commandString.Append($" -cultures:{Cultures}");
        }
        if (Fv)
        {
            commandString.Append(" -fv");
        }
        if (PdbOut != null)
        {
            commandString.Append($" -pdbout %outputfolder%{PdbOut}");
        }
        if (WixProjectFile != null)
        {
            AbsolutePath destinationPath = TaskEnvironment.GetAbsolutePath(Path.Combine(packageDropDir, Path.GetFileName(WixProjectFile)));
            File.Copy(TaskEnvironment.GetAbsolutePath(WixProjectFile), destinationPath, true);
            commandString.Append($" -wixprojectfile {Path.GetFileName(WixProjectFile)}");
        }
        if (ContentsFile != null)
        {
            commandString.Append($" -contentsfile {Path.GetFileName(ContentsFile)}");
        }
        if (OutputsFile != null)
        {
            commandString.Append($" -outputsfile {Path.GetFileName(OutputsFile)}");
        }
        if (BuiltOutputsFile != null)
        {
            commandString.Append($" -builtoutputsfile {Path.GetFileName(BuiltOutputsFile)}");
        }
        if (Sice != null)
        {
            foreach (var siceItem in Sice)
            {
                commandString.Append($" -sice:{siceItem.ItemSpec}");
            }
        }
        if (SuppressValidation)
        {
            commandString.Append(" -sval");
        }
    }
}