public async Task ListTargetsAsync()
        {
            const string SelectedMarker = "*";

            var targets = await _apiPortClient.GetTargetsAsync();

            if (targets.Any())
            {
                Console.WriteLine();
                Console.WriteLine(LocalizedStrings.TargetUsage);
                Console.WriteLine();
                Console.WriteLine(LocalizedStrings.AvailableTargets);

                var expandableTargets = targets.Where(target => target.ExpandedTargets.Any());
                var groupedTargets = targets.Where(target => !target.ExpandedTargets.Any()).GroupBy(target => target.Name);

                var offsetLength = new[] { LocalizedStrings.TargetsName, LocalizedStrings.TargetsVersion, LocalizedStrings.TargetsDescription }.Max(i => i.Length) + 1;

                foreach (var item in groupedTargets)
                {
                    Console.WriteLine();

                    // Select the latest non-empty target's description
                    var description = item
                        .OrderByDescending(i => i.Version)
                        .FirstOrDefault(i => !string.IsNullOrWhiteSpace(i.Description));

                    Console.WriteLine(LocalizedStrings.TargetsName.PadRight(offsetLength, ' ') + item.Key);
                    Console.WriteLine(LocalizedStrings.TargetsVersion.PadRight(offsetLength) + string.Join(LocalizedStrings.VersionListJoin, item.Select(v => v.Version.ToString() + (v.IsSet ? SelectedMarker : string.Empty))));

                    if (description != null)
                    {
                        Console.WriteLine(LocalizedStrings.TargetsDescription.PadRight(offsetLength) + description.Description);
                    }
                }

                if (expandableTargets.Any())
                {
                    Console.WriteLine();
                    Console.WriteLine(Microsoft.Fx.Portability.Resources.LocalizedStrings.AvailableGroupedTargets);

                    foreach (var item in expandableTargets)
                    {
                        Console.WriteLine(LocalizedStrings.TargetsListGrouped, item.Name, String.Join(CultureInfo.CurrentCulture.TextInfo.ListSeparator + " ", item.ExpandedTargets));
                    }
                }
            }

            if (_targetMapper.Aliases.Any())
            {
                Console.WriteLine();
                Console.WriteLine(LocalizedStrings.AvailableAliases);

                foreach (var alias in _targetMapper.Aliases)
                {
                    Console.WriteLine(LocalizedStrings.TargetsListNoVersion, alias);
                }
            }
        }
        public Task<ServiceResponse<IEnumerable<AvailableTarget>>> GetTargetsAsync()
        {
            var targets = new[]
            {
                new AvailableTarget
                {
                    Name = "Target1",
                    Version = Version.Parse("1.0"),
                    Description = "Description1"
                },
                new AvailableTarget
                {
                    Name = "Target1",
                    Version = Version.Parse("2.0"),
                    Description = "Description2"
                },
                new AvailableTarget
                {
                    Name = "Target1",
                    Version = Version.Parse("3.0"),
                    Description = "Description3"
                },
                new AvailableTarget
                {
                    Name = "Target2",
                    Version = Version.Parse("1.0"),
                },
                new AvailableTarget
                {
                    Name = "Target2",
                    Version = Version.Parse("2.0"),
                },
            };

            var response = ServiceResponse.Create<IEnumerable<AvailableTarget>>(targets);

            return Task.FromResult(response);
        }