private static bool ParseArguments(string[] args) { if (Settings.NeedHelp(args) || !Settings.IsValid(args)) { return(false); } Settings.Log = Log.IsEnabled = Array.Exists(args, element => element == "/log"); Settings.Optimize = Array.Exists(args, element => element == "/optimize"); Settings.Unsafe = Array.Exists(args, element => element == "/unsafe"); var currentDirectory = Directory.GetCurrentDirectory(); var specifiedProjectFilename = Array.Find(args, element => element.EndsWith(".dotnetproj")); var specifiedProjectFile = specifiedProjectFilename == null ? null : Directory.GetFiles(currentDirectory, specifiedProjectFilename); var projectFiles = Directory.GetFiles(currentDirectory, "*.dotnetproj"); Settings.ProjectFile = specifiedProjectFile == null ? projectFiles.Length == 1 ? projectFiles[0] : "" : specifiedProjectFile.Length == 1 ? specifiedProjectFile[0] : ""; var specifiedSourceFilenames = Array.FindAll(args, element => element.EndsWith(".cs") && !element.StartsWith("/")); foreach (var sourceFilename in specifiedSourceFilenames) { Settings.SourceFiles.AddRange(Directory.GetFiles(currentDirectory, sourceFilename)); } return(ValidateAndSetOptionSpecifications(Array.Find(args, element => element.StartsWith("/target")), Settings.SetTargetSpecification) && ValidateAndSetOptionSpecifications(Array.Find(args, element => element.StartsWith("/platform")), Settings.SetPlatformSpecification) && ValidateAndSetOptionSpecifications(Array.Find(args, element => element.StartsWith("/debug")), Settings.SetDebugSpecification) && ValidateAndSetOptionSpecifications(Array.Find(args, element => element.StartsWith("/reference")), Settings.SetReferenceSpecification) && ValidateAndSetOptionSpecifications(Array.Find(args, element => element.StartsWith("/recurse")), Settings.SetRecurseSpecification) && ValidateAndSetOptionSpecifications(Array.Find(args, element => element.StartsWith("/runtime")), Settings.SetRuntimeSpecification)); }