public void ViewHelpForCommand(string commandName) { ICommand command = _commandManager.GetCommand(commandName); CommandAttribute attribute = command.CommandAttribute; Console.WriteLine("usage: {0} {1} {2}", _commandExe, attribute.CommandName, attribute.GetUsageSummary()); Console.WriteLine(); if (!String.IsNullOrEmpty(attribute.AltName)) { Console.WriteLine("alias: {0}", attribute.AltName); Console.WriteLine(); } Console.WriteLine(attribute.GetDescription()); Console.WriteLine(); if (attribute.GetUsageDescription() != null) { int padding = 5; Console.PrintJustified(padding, attribute.GetUsageDescription()); Console.WriteLine(); } var options = _commandManager.GetCommandOptions(command); if (options.Count > 0) { Console.WriteLine("options:"); Console.WriteLine(); // Get the max option width. +2 for showing + against multivalued properties int maxOptionWidth = options.Max(o => o.Value.Name.Length) + 2; // Get the max altname option width int maxAltOptionWidth = options.Max(o => (o.Key.AltName ?? String.Empty).Length); foreach (var o in options) { Console.Write(" {0, -" + (maxOptionWidth + 2) + "}", o.Value.Name + (CommandLineUtility.IsMultiValuedProperty(o.Value) ? " +" : String.Empty)); Console.Write(" {0, -" + (maxAltOptionWidth + 4) + "}", GetAltText(o.Key.AltName)); Console.PrintJustified((10 + maxAltOptionWidth + maxOptionWidth), o.Key.GetDescription()); } Console.WriteLine(); } }