/// <summary>
        /// When multiple VisualStudio instances are found it uses the supplied logger to print information about found instances. Then waits for console input to select one.
        /// </summary>
        /// <param name="visualStudioInstances"></param>
        /// <returns></returns>
        public VisualStudioInstance SelectVisualStudioInstance(VisualStudioInstance[] visualStudioInstances)
        {
            if (visualStudioInstances.Length == 1)
            {
                return(visualStudioInstances[0]);
            }

            _logger.Warning("Multiple installs of MSBuild detected please select one:");
            for (int i = 0; i < visualStudioInstances.Length; i++)
            {
                _logger.Warning($"Instance {i + 1}");
                _logger.Warning($"    Name: {visualStudioInstances[i].Name}");
                _logger.Warning($"    Version: {visualStudioInstances[i].Version}");
                _logger.Warning($"    MSBuild Path: {visualStudioInstances[i].MSBuildPath}");
            }

            while (true)
            {
                var userResponse = Console.ReadLine();
                if (int.TryParse(userResponse, out int instanceNumber) &&
                    instanceNumber > 0 &&
                    instanceNumber <= visualStudioInstances.Length)
                {
                    return(visualStudioInstances[instanceNumber - 1]);
                }
                _logger.Info("Input not accepted, try again.");
            }
        }
예제 #2
0
        private async Task <IEnumerable <ArgumentSyntax> > CalculateArguments(ReferenceLocation location)
        {
            IEnumerable <SyntaxNode> nodes = await CalculateInvocationSyntaxNodes(location);

            if (!nodes.Any())
            {
                _logger.Warning("Did not find and invocation node.");
                return(new ArgumentSyntax[0]);
            }
            if (nodes.Count() > 1)
            {
                _logger.Debug("Got multiple invocation nodes using only the last!");
            }

            return(CalculateArguments(nodes.Last()));
        }