private void ApplyConfigTransforms(string sourceFile, string suffix, IFileOperationsExecuter fileOps,
                                           HashSet <string> alreadyRun)
        {
            if (!suffix.EndsWith(".config", StringComparison.OrdinalIgnoreCase))
            {
                suffix = suffix + ".config";
            }

            // Update the extension of the found config to the suffix extensions
            string transformFile = Path.ChangeExtension(sourceFile, suffix);

            // Try and find the transform config to apply to the source file
            if ((fileOps.FileExists(transformFile) &&
                 !string.Equals(sourceFile, transformFile, StringComparison.InvariantCultureIgnoreCase)) &&
                !alreadyRun.Contains(transformFile))
            {
                alreadyRun.Add(transformFile);

                var transformExePath = Path.Combine(fileOps.GetBaseWorkingDirectory(),
                                                    @"ExtTemp\WindowsSDK\Resources\ctt.exe");

                if (!fileOps.FileExists(transformExePath))
                {
                    throw new FileNotFoundException("ctt.exe could not be found on the agent.", transformExePath);
                }

                // Get all the arguments that form the executable transform task
                var arguments = BuildArguments(sourceFile, transformFile);

                LogInformation("Performing XDT transform...");

                // Call the transform executable for the file
                ExecuteCommandLine(transformExePath, arguments);
            }
        }