示例#1
0
        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));
        }