protected override void BeginProcessing() { #if USING_RESTABLE_CMDLET if (Remote) { ProcessRecordViaRest(); return; } #endif using (new PushDirectory(Path.Combine(SessionState.Drive.Current.Root, SessionState.Drive.Current.CurrentLocation))) { // Invoking a ptk script. if (string.IsNullOrWhiteSpace(ScriptFile)) { // search for it. ScriptFile = new[] { @"copkg\.buildinfo", @"contrib\.buildinfo", @"contrib\coapp\.buildinfo", @".buildinfo" }.WalkUpPaths(); if (string.IsNullOrEmpty(ScriptFile)) { throw new ClrPlusException(@"Unable to find .buildinfo file anywhere in the current directory structure."); } } using (var local = LocalEventSource) { local.Events += new SourceError((code, location, message, objects) => { location = location.IsNullOrEmpty() ? SourceLocation.Unknowns : location; Host.UI.WriteErrorLine("{0}:{1}:{2}".format(location.FirstOrDefault(), code, message.format(objects))); return(true); }); if (!NoWarnings) { local.Events += new SourceWarning((code, location, message, objects) => { WriteWarning(message); return(false); }); } local.Events += new SourceDebug((code, location, message, objects) => { WriteVerbose(message); return(false); }); local.Events += new MSBuildMessage((obj) => { switch (obj.EventType) { case "BuildWarning": if (!NoWarnings) { Host.UI.WriteLine("{0}:{1}:{2}".format(obj.File, obj.Code, obj.Message)); } break; case "BuildError": Host.UI.WriteErrorLine("{0}:{1}:{2}".format(obj.File, obj.Code, obj.Message)); break; case "ProjectStarted": case "ProjectFinished": case "TaskStarted": case "TaskFinished": case "TargetStarted": case "TargetFinished": case "BuildStarted": case "BuildFinished": WriteVerbose(obj.Message); break; case "BuildMessage": if (filterMessages.Any(each => obj.Message.IndexOf(each) > -1)) { WriteVerbose(obj.Message); } else { Host.UI.WriteLine(obj.Message); } break; default: WriteVerbose(obj.Message); break; } return(false); }); using (buildScript = new BuildScript(ScriptFile)) { if (Defines != null) { foreach (var i in Defines) { var p = i.IndexOf("="); var k = p > -1 ? i.Substring(0, p) : i; var v = p > -1 ? i.Substring(p + 1) : ""; buildScript.AddMacro(k, v); } } if (Define != null) { foreach (var i in Define) { var p = i.IndexOf("="); var k = p > -1 ? i.Substring(0, p) : i; var v = p > -1 ? i.Substring(p + 1) : ""; buildScript.AddMacro(k, v); } } if (Targets.IsNullOrEmpty()) { Targets = new string[] { "default" }; } if (SaveScript) { WriteObject("Script Saved To: {0}".format(buildScript.EmitScript())); return; } if (DumpScript) { WriteObject(buildScript.ScriptText()); return; } Environment.SetEnvironmentVariable("MaxThreads", "" + MaxThreads); buildScript.MaxThreads = MaxThreads; buildScript.Execute(Targets); } } } }