// Decompiled with JetBrains decompiler // Type: Microsoft.Build.CommandLine.CommandLineSwitches // Assembly: MSBuild, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // MVID: E42BAB90-704E-4C03-B5C0-D4E3A6B884E3 // Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00001-msil\Virus.Win32.Nimnul.c-d5c6463b93131b3c485115414cf5809e01323986e3d4274a4868222cbb54aa43.exe using Microsoft.Build.Shared; using System; using System.Collections; namespace Microsoft.Build.CommandLine { internal sealed class CommandLineSwitches { private static readonly CommandLineSwitches.ParameterlessSwitchInfo[] parameterlessSwitchesMap = new CommandLineSwitches.ParameterlessSwitchInfo[5] { new CommandLineSwitches.ParameterlessSwitchInfo(new string[3] { "help", "h", "?" }, CommandLineSwitches.ParameterlessSwitch.Help, (string) null), new CommandLineSwitches.ParameterlessSwitchInfo(new string[2] { "version", "ver" }, CommandLineSwitches.ParameterlessSwitch.Version, (string) null), new CommandLineSwitches.ParameterlessSwitchInfo(new string[1] { "nologo" }, CommandLineSwitches.ParameterlessSwitch.NoLogo, (string) null), new CommandLineSwitches.ParameterlessSwitchInfo(new string[2] { "noautoresponse", "noautorsp" }, CommandLineSwitches.ParameterlessSwitch.NoAutoResponse, (string) null), new CommandLineSwitches.ParameterlessSwitchInfo(new string[2] { "noconsolelogger", "noconlog" }, CommandLineSwitches.ParameterlessSwitch.NoConsoleLogger, (string) null) }; private static readonly CommandLineSwitches.ParameterizedSwitchInfo[] parameterizedSwitchesMap = new CommandLineSwitches.ParameterizedSwitchInfo[7] { new CommandLineSwitches.ParameterizedSwitchInfo(new string[1], CommandLineSwitches.ParameterizedSwitch.Project, "DuplicateProjectSwitchError", false, (string) null, true), new CommandLineSwitches.ParameterizedSwitchInfo(new string[2] { "target", "t" }, CommandLineSwitches.ParameterizedSwitch.Target, (string) null, true, "MissingTargetError", true), new CommandLineSwitches.ParameterizedSwitchInfo(new string[2] { "property", "p" }, CommandLineSwitches.ParameterizedSwitch.Property, (string) null, true, "MissingPropertyError", true), new CommandLineSwitches.ParameterizedSwitchInfo(new string[2] { "logger", "l" }, CommandLineSwitches.ParameterizedSwitch.Logger, (string) null, false, "MissingLoggerError", false), new CommandLineSwitches.ParameterizedSwitchInfo(new string[2] { "verbosity", "v" }, CommandLineSwitches.ParameterizedSwitch.Verbosity, (string) null, false, "MissingVerbosityError", true), new CommandLineSwitches.ParameterizedSwitchInfo(new string[2] { "validate", "val" }, CommandLineSwitches.ParameterizedSwitch.Validate, (string) null, false, (string) null, true), new CommandLineSwitches.ParameterizedSwitchInfo(new string[2] { "consoleloggerparameters", "clp" }, CommandLineSwitches.ParameterizedSwitch.ConsoleLoggerParameters, (string) null, false, (string) null, true) }; private CommandLineSwitches.DetectedParameterlessSwitch[] parameterlessSwitches; private CommandLineSwitches.DetectedParameterizedSwitch[] parameterizedSwitches; private static readonly char[] parameterSeparators = new char[2] { ',', ';' }; private static readonly string[] noParameters = new string[0]; private string errorMessage; private string badCommandLineArg; private Exception innerException; private bool isParameterError; internal static bool IsParameterlessSwitch( string switchName, out CommandLineSwitches.ParameterlessSwitch parameterlessSwitch, out string duplicateSwitchErrorMessage) { parameterlessSwitch = CommandLineSwitches.ParameterlessSwitch.Invalid; duplicateSwitchErrorMessage = (string) null; foreach (CommandLineSwitches.ParameterlessSwitchInfo parameterlessSwitches in CommandLineSwitches.parameterlessSwitchesMap) { foreach (string switchName1 in parameterlessSwitches.switchNames) { if (string.Compare(switchName, switchName1, StringComparison.OrdinalIgnoreCase) == 0) { parameterlessSwitch = parameterlessSwitches.parameterlessSwitch; duplicateSwitchErrorMessage = parameterlessSwitches.duplicateSwitchErrorMessage; break; } } } return parameterlessSwitch != CommandLineSwitches.ParameterlessSwitch.Invalid; } internal static bool IsParameterizedSwitch( string switchName, out CommandLineSwitches.ParameterizedSwitch parameterizedSwitch, out string duplicateSwitchErrorMessage, out bool multipleParametersAllowed, out string missingParametersErrorMessage, out bool unquoteParameters) { parameterizedSwitch = CommandLineSwitches.ParameterizedSwitch.Invalid; duplicateSwitchErrorMessage = (string) null; multipleParametersAllowed = false; missingParametersErrorMessage = (string) null; unquoteParameters = false; foreach (CommandLineSwitches.ParameterizedSwitchInfo parameterizedSwitches in CommandLineSwitches.parameterizedSwitchesMap) { foreach (string switchName1 in parameterizedSwitches.switchNames) { if (string.Compare(switchName, switchName1, StringComparison.OrdinalIgnoreCase) == 0) { parameterizedSwitch = parameterizedSwitches.parameterizedSwitch; duplicateSwitchErrorMessage = parameterizedSwitches.duplicateSwitchErrorMessage; multipleParametersAllowed = parameterizedSwitches.multipleParametersAllowed; missingParametersErrorMessage = parameterizedSwitches.missingParametersErrorMessage; unquoteParameters = parameterizedSwitches.unquoteParameters; break; } } } return parameterizedSwitch != CommandLineSwitches.ParameterizedSwitch.Invalid; } internal CommandLineSwitches() { this.parameterlessSwitches = new CommandLineSwitches.DetectedParameterlessSwitch[5]; this.parameterizedSwitches = new CommandLineSwitches.DetectedParameterizedSwitch[7]; } internal void SetParameterlessSwitch( CommandLineSwitches.ParameterlessSwitch parameterlessSwitch, string commandLineArg) { this.parameterlessSwitches[(int) parameterlessSwitch].commandLineArg = commandLineArg; } internal bool SetParameterizedSwitch( CommandLineSwitches.ParameterizedSwitch parameterizedSwitch, string commandLineArg, string switchParameters, bool multipleParametersAllowed, bool unquoteParameters) { bool flag = false; if (this.parameterizedSwitches[(int) parameterizedSwitch].commandLineArg == null) this.parameterizedSwitches[(int) parameterizedSwitch].parameters = new ArrayList(); this.parameterizedSwitches[(int) parameterizedSwitch].commandLineArg = commandLineArg; if (multipleParametersAllowed) { int emptySplits; this.parameterizedSwitches[(int) parameterizedSwitch].parameters.AddRange((ICollection) QuotingUtilities.SplitUnquoted(switchParameters, int.MaxValue, false, unquoteParameters, out emptySplits, CommandLineSwitches.parameterSeparators)); flag = emptySplits == 0; } else { if (unquoteParameters) switchParameters = QuotingUtilities.Unquote(switchParameters); if (switchParameters.Length > 0) { this.parameterizedSwitches[(int) parameterizedSwitch].parameters.Add((object) switchParameters); flag = true; } } return flag; } internal bool IsParameterlessSwitchSet( CommandLineSwitches.ParameterlessSwitch parameterlessSwitch) { return this.parameterlessSwitches[(int) parameterlessSwitch].commandLineArg != null; } internal bool this[ CommandLineSwitches.ParameterlessSwitch parameterlessSwitch] { return this.parameterlessSwitches[(int) parameterlessSwitch].commandLineArg != null; } internal string GetParameterlessSwitchCommandLineArg( CommandLineSwitches.ParameterlessSwitch parameterlessSwitch) { return this.parameterlessSwitches[(int) parameterlessSwitch].commandLineArg; } internal bool IsParameterizedSwitchSet( CommandLineSwitches.ParameterizedSwitch parameterizedSwitch) { return this.parameterizedSwitches[(int) parameterizedSwitch].commandLineArg != null; } internal string[] this[ CommandLineSwitches.ParameterizedSwitch parameterizedSwitch] { return this.parameterizedSwitches[(int) parameterizedSwitch].commandLineArg == null ? CommandLineSwitches.noParameters : (string[]) this.parameterizedSwitches[(int) parameterizedSwitch].parameters.ToArray(typeof (string)); } internal string GetParameterizedSwitchCommandLineArg( CommandLineSwitches.ParameterizedSwitch parameterizedSwitch) { return this.parameterizedSwitches[(int) parameterizedSwitch].commandLineArg; } internal bool HaveAnySwitchesBeenSet() { for (int index = 0; index < 5; ++index) { if (this.IsParameterlessSwitchSet((CommandLineSwitches.ParameterlessSwitch) index)) return true; } for (int index = 0; index < 7; ++index) { if (this.IsParameterizedSwitchSet((CommandLineSwitches.ParameterizedSwitch) index)) return true; } return false; } internal void SetUnknownSwitchError(string badCommandLineArgValue) => this.SetSwitchError("UnknownSwitchError", badCommandLineArgValue); internal void SetUnexpectedParametersError(string badCommandLineArgValue) => this.SetSwitchError("UnexpectedParametersError", badCommandLineArgValue); internal void SetSwitchError(string messageResourceNameValue, string badCommandLineArgValue) => this.SetError(messageResourceNameValue, badCommandLineArgValue, (Exception) null, false); internal void SetParameterError(string messageResourceNameValue, string badCommandLineArgValue) => this.SetParameterError(messageResourceNameValue, badCommandLineArgValue, (Exception) null); internal void SetParameterError( string messageResourceNameValue, string badCommandLineArgValue, Exception innerExceptionValue) { this.SetError(messageResourceNameValue, badCommandLineArgValue, innerExceptionValue, true); } private void SetError( string messageResourceNameValue, string badCommandLineArgValue, Exception innerExceptionValue, bool isParameterErrorValue) { if (this.HaveErrors()) return; this.errorMessage = messageResourceNameValue; this.badCommandLineArg = badCommandLineArgValue; this.innerException = innerExceptionValue; this.isParameterError = isParameterErrorValue; } internal bool HaveErrors() => this.errorMessage != null; internal void ThrowErrors() { if (!this.HaveErrors()) return; if (this.isParameterError) InitializationException.Throw(this.errorMessage, this.badCommandLineArg, this.innerException, false); else CommandLineSwitchException.Throw(this.errorMessage, this.badCommandLineArg); } internal void Append(CommandLineSwitches switchesToAppend) { if (!this.HaveErrors() && switchesToAppend.HaveErrors()) { this.errorMessage = switchesToAppend.errorMessage; this.badCommandLineArg = switchesToAppend.badCommandLineArg; this.innerException = switchesToAppend.innerException; this.isParameterError = switchesToAppend.isParameterError; } for (int index = 0; index < 5; ++index) { if (switchesToAppend.IsParameterlessSwitchSet((CommandLineSwitches.ParameterlessSwitch) index)) { if (!this.IsParameterlessSwitchSet((CommandLineSwitches.ParameterlessSwitch) index) || CommandLineSwitches.parameterlessSwitchesMap[index].duplicateSwitchErrorMessage == null) this.parameterlessSwitches[index].commandLineArg = switchesToAppend.parameterlessSwitches[index].commandLineArg; else this.SetSwitchError(CommandLineSwitches.parameterlessSwitchesMap[index].duplicateSwitchErrorMessage, switchesToAppend.GetParameterlessSwitchCommandLineArg((CommandLineSwitches.ParameterlessSwitch) index)); } } for (int index = 0; index < 7; ++index) { if (switchesToAppend.IsParameterizedSwitchSet((CommandLineSwitches.ParameterizedSwitch) index)) { if (!this.IsParameterizedSwitchSet((CommandLineSwitches.ParameterizedSwitch) index) || CommandLineSwitches.parameterizedSwitchesMap[index].duplicateSwitchErrorMessage == null) { if (this.parameterizedSwitches[index].commandLineArg == null) this.parameterizedSwitches[index].parameters = new ArrayList(); this.parameterizedSwitches[index].commandLineArg = switchesToAppend.parameterizedSwitches[index].commandLineArg; this.parameterizedSwitches[index].parameters.AddRange((ICollection) switchesToAppend.parameterizedSwitches[index].parameters); } else this.SetSwitchError(CommandLineSwitches.parameterizedSwitchesMap[index].duplicateSwitchErrorMessage, switchesToAppend.GetParameterizedSwitchCommandLineArg((CommandLineSwitches.ParameterizedSwitch) index)); } } } internal enum ParameterlessSwitch { Invalid = -1, // 0xFFFFFFFF Help = 0, Version = 1, NoLogo = 2, NoAutoResponse = 3, NoConsoleLogger = 4, NumberOfParameterlessSwitches = 5, } internal enum ParameterizedSwitch { Invalid = -1, // 0xFFFFFFFF Project = 0, Target = 1, Property = 2, Logger = 3, Verbosity = 4, Validate = 5, ConsoleLoggerParameters = 6, NumberOfParameterizedSwitches = 7, } private struct ParameterlessSwitchInfo { internal string[] switchNames; internal string duplicateSwitchErrorMessage; internal CommandLineSwitches.ParameterlessSwitch parameterlessSwitch; internal ParameterlessSwitchInfo( string[] switchNames, CommandLineSwitches.ParameterlessSwitch parameterlessSwitch, string duplicateSwitchErrorMessage) { this.switchNames = switchNames; this.duplicateSwitchErrorMessage = duplicateSwitchErrorMessage; this.parameterlessSwitch = parameterlessSwitch; } } private struct ParameterizedSwitchInfo { internal string[] switchNames; internal string duplicateSwitchErrorMessage; internal bool multipleParametersAllowed; internal string missingParametersErrorMessage; internal bool unquoteParameters; internal CommandLineSwitches.ParameterizedSwitch parameterizedSwitch; internal ParameterizedSwitchInfo( string[] switchNames, CommandLineSwitches.ParameterizedSwitch parameterizedSwitch, string duplicateSwitchErrorMessage, bool multipleParametersAllowed, string missingParametersErrorMessage, bool unquoteParameters) { this.switchNames = switchNames; this.duplicateSwitchErrorMessage = duplicateSwitchErrorMessage; this.multipleParametersAllowed = multipleParametersAllowed; this.missingParametersErrorMessage = missingParametersErrorMessage; this.unquoteParameters = unquoteParameters; this.parameterizedSwitch = parameterizedSwitch; } } private struct DetectedParameterlessSwitch { internal string commandLineArg; } private struct DetectedParameterizedSwitch { internal string commandLineArg; internal ArrayList parameters; } } }