Inheritance: System.MarshalByRefObject, IBuildEngine
 public ProjectBuilder(BuildEngine buildEngine, Engine engine, string file)
 {
     this.file        = file;
     this.engine      = engine;
     this.buildEngine = buildEngine;
     consoleLogger    = new MDConsoleLogger(LoggerVerbosity.Normal, LogWriteLine, null, null);
 }
Beispiel #2
0
        public static void Main(string[] args)
        {
            try {
                RegisterRemotingChannel();
                WatchProcess(Console.ReadLine());

                BuildEngine     builderEngine = new BuildEngine();
                BinaryFormatter bf            = new BinaryFormatter();
                ObjRef          oref          = RemotingServices.Marshal(builderEngine);
                MemoryStream    ms            = new MemoryStream();
                bf.Serialize(ms, oref);
                Console.Error.WriteLine(Convert.ToBase64String(ms.ToArray()));

                if (WaitHandle.WaitAny(new WaitHandle[] { builderEngine.WaitHandle, exitEvent }) == 0)
                {
                    // Wait before exiting, so that the remote call that disposed the builder can be completed
                    System.Threading.Thread.Sleep(400);
                }

                if (unixRemotingFile != null && File.Exists(unixRemotingFile))
                {
                    File.Delete(unixRemotingFile);
                }
            } catch (Exception ex) {
                Console.WriteLine(ex);
            }
        }
Beispiel #3
0
        public MSBuildResult[] RunTarget(string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            MSBuildResult[] result = null;
            BuildEngine.RunSTA(delegate
            {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    LocalLogger logger = new LocalLogger(Path.GetDirectoryName(file));
                    engine.UnregisterAllLoggers();
                    engine.RegisterLogger(logger);
                    engine.RegisterLogger(consoleLogger);

                    consoleLogger.Verbosity = GetVerbosity(verbosity);

                    project.Build(target);

                    result = logger.BuildResult.ToArray();
                    //		} catch (InvalidProjectFileException ex) {
                    //			result = new MSBuildResult[] { new MSBuildResult (false, ex.ProjectFile ?? file, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message) };
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
		public ProjectBuilder (BuildEngine buildEngine, ProjectCollection engine, string file)
		{
			this.file = file;
			this.engine = engine;
			this.buildEngine = buildEngine;
			Refresh ();
		}
        public MSBuildResult[] RunTarget(string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            MSBuildResult[] result = null;
            BuildEngine.RunSTA(delegate
            {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    var logger = new LocalLogger(file);
                    engine.UnregisterAllLoggers();
                    engine.RegisterLogger(logger);
                    engine.RegisterLogger(consoleLogger);

                    consoleLogger.Verbosity = GetVerbosity(verbosity);

                    project.Build(target);

                    result = logger.BuildResult.ToArray();
                } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
                    var r = new MSBuildResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    logWriter.WriteLine(r.ToString());
                    result = new [] { r };
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
        public MSBuildResult[] RunTarget(string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            MSBuildResult[] result = null;
            BuildEngine.RunSTA(delegate
            {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    LocalLogger logger = new LocalLogger(Path.GetDirectoryName(file));
                    engine.UnregisterAllLoggers();
                    engine.RegisterLogger(logger);
                    engine.RegisterLogger(consoleLogger);

                    consoleLogger.Verbosity = GetVerbosity(verbosity);

                    // We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
                    // an xbuild bug which causes references to not be resolved after the project has been built once.
                    engine.BuildProject(project, new string[] { target }, new Hashtable(), BuildSettings.None);

                    result = logger.BuildResult.ToArray();
                } catch (InvalidProjectFileException ex) {
                    result = new MSBuildResult[] { new MSBuildResult(false, ex.ProjectFile ?? file, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message) };
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
 public ProjectBuilder(BuildEngine buildEngine, ProjectCollection engine, string file)
 {
     this.file        = file;
     this.engine      = engine;
     this.buildEngine = buildEngine;
     Refresh();
 }
		public ProjectBuilder (BuildEngine buildEngine, ProjectCollection engine, string file)
		{
			this.file = file;
			this.engine = engine;
			this.buildEngine = buildEngine;
			consoleLogger = new ConsoleLogger (LoggerVerbosity.Normal, LogWriteLine, null, null);
			Refresh ();
		}
Beispiel #9
0
 public ProjectBuilder(BuildEngine buildEngine, ProjectCollection engine, string file)
 {
     this.file        = file;
     this.engine      = engine;
     this.buildEngine = buildEngine;
     consoleLogger    = new ConsoleLogger(LoggerVerbosity.Normal, LogWriteLine, null, null);
     Refresh();
 }
Beispiel #10
0
 public string[] GetSupportedTargets(ProjectConfigurationInfo[] configurations)
 {
     string[] result = null;
     BuildEngine.RunSTA(delegate {
         try {
             var project = SetupProject(configurations);
             result      = project.Targets.OfType <Target> ().Select(t => t.Name).ToArray();
         } catch {
             result = new string [0];
         }
     });
     return(result);
 }
Beispiel #11
0
        public string[] GetAssemblyReferences(ProjectConfigurationInfo[] configurations)
        {
            string[] refsArray = null;

            BuildEngine.RunSTA(delegate
            {
                var project = SetupProject(configurations);

                // We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
                // an xbuild bug which causes references to not be resolved after the project has been built once.
                engine.BuildProject(project, new string[] { "ResolveAssemblyReferences" }, new Hashtable(), BuildSettings.None);
                BuildItemGroup grp = project.GetEvaluatedItemsByName("ReferencePath");
                List <string> refs = new List <string> ();
                foreach (BuildItem item in grp)
                {
                    refs.Add(UnescapeString(item.Include));
                }
                refsArray = refs.ToArray();
            });
            return(refsArray);
        }
Beispiel #12
0
        public string[] GetAssemblyReferences(ProjectConfigurationInfo[] configurations)
        {
            string[] refsArray = null;

            BuildEngine.RunSTA(delegate
            {
                var project = SetupProject(configurations);

                // We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
                // an xbuild bug which causes references to not be resolved after the project has been built once.
                var pi = project.CreateProjectInstance();
                pi.Build("ResolveAssemblyReferences", null);
                List <string> refs = new List <string> ();
                foreach (ProjectItemInstance item in pi.GetItems("ReferencePath"))
                {
                    refs.Add(UnescapeString(item.EvaluatedInclude));
                }
                refsArray = refs.ToArray();
            });
            return(refsArray);
        }
Beispiel #13
0
        public static void Main()
        {
            try {
                RegisterRemotingChannel();
                WatchProcess(Console.ReadLine());

                var    builderEngine = new BuildEngine();
                var    bf            = new BinaryFormatter();
                ObjRef oref          = RemotingServices.Marshal(builderEngine);
                var    ms            = new MemoryStream();
                bf.Serialize(ms, oref);
                Console.Error.WriteLine("[MonoDevelop]" + Convert.ToBase64String(ms.ToArray()));

                if (WaitHandle.WaitAny(new WaitHandle[] { builderEngine.WaitHandle, exitEvent }) == 0)
                {
                    // Wait before exiting, so that the remote call that disposed the builder can be completed
                    Thread.Sleep(400);
                }
            } catch (Exception ex) {
                Console.WriteLine(ex);
            }
        }
Beispiel #14
0
        public static void Main()
        {
            try {
                RegisterRemotingChannel ();
                WatchProcess (Console.ReadLine ());

                var builderEngine = new BuildEngine ();
                var bf = new BinaryFormatter ();
                ObjRef oref = RemotingServices.Marshal (builderEngine);
                var ms = new MemoryStream ();
                bf.Serialize (ms, oref);
                Console.Error.WriteLine ("[MonoDevelop]" + Convert.ToBase64String (ms.ToArray ()));

                if (WaitHandle.WaitAny (new WaitHandle[] { builderEngine.WaitHandle, exitEvent }) == 0) {
                    // Wait before exiting, so that the remote call that disposed the builder can be completed
                    Thread.Sleep (400);
                }

            } catch (Exception ex) {
                Console.WriteLine (ex);
            }
        }
		public static void Main (string[] args)
		{
			try {
				RegisterRemotingChannel ();
				WatchProcess (Console.ReadLine ());
				
				BuildEngine builderEngine = new BuildEngine ();
				BinaryFormatter bf = new BinaryFormatter ();
				ObjRef oref = RemotingServices.Marshal (builderEngine);
				MemoryStream ms = new MemoryStream ();
				bf.Serialize (ms, oref);
				Console.Error.WriteLine (Convert.ToBase64String (ms.ToArray ()));
				
				if (WaitHandle.WaitAny (new WaitHandle[] { builderEngine.WaitHandle, exitEvent }) == 0) {
					// Wait before exiting, so that the remote call that disposed the builder can be completed
					System.Threading.Thread.Sleep (400);
				}
				
				if (unixRemotingFile != null && File.Exists (unixRemotingFile))
					File.Delete (unixRemotingFile);
			} catch (Exception ex) {
				Console.WriteLine (ex);
			}
		}
Beispiel #16
0
        public MSBuildResult Run(
            ProjectConfigurationInfo[] configurations, ILogWriter logWriter, MSBuildVerbosity verbosity,
            string[] runTargets, string[] evaluateItems, string[] evaluateProperties)
        {
            if (runTargets == null || runTargets.Length == 0)
            {
                throw new ArgumentException("runTargets is empty");
            }

            MSBuildResult result = null;

            BuildEngine.RunSTA(delegate {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    ILogger[] loggers;
                    var logger = new LocalLogger(file);
                    if (logWriter != null)
                    {
                        consoleLogger.Verbosity = GetVerbosity(verbosity);
                        loggers = new ILogger[] { logger, consoleLogger };
                    }
                    else
                    {
                        loggers = new ILogger[] { logger };
                    }

                    //building the project will create items and alter properties, so we use a new instance
                    var pi = project.CreateProjectInstance();

                    pi.Build(runTargets, loggers);

                    result = new MSBuildResult(logger.BuildResult.ToArray());

                    if (evaluateProperties != null)
                    {
                        foreach (var name in evaluateProperties)
                        {
                            var prop = pi.GetProperty(name);
                            result.Properties [name] = prop != null? prop.EvaluatedValue : null;
                        }
                    }

                    if (evaluateItems != null)
                    {
                        foreach (var name in evaluateItems)
                        {
                            var grp  = pi.GetItems(name);
                            var list = new List <MSBuildEvaluatedItem> ();
                            foreach (var item in grp)
                            {
                                var evItem = new MSBuildEvaluatedItem(name, UnescapeString(item.EvaluatedInclude));
                                foreach (var m in item.Metadata)
                                {
                                    evItem.Metadata [m.Name] = UnescapeString(m.EvaluatedValue);
                                }
                                list.Add(evItem);
                            }
                            result.Items[name] = list;
                        }
                    }
                } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
                    var r = new MSBuildTargetResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    logWriter.WriteLine(r.ToString());
                    result = new MSBuildResult(new [] { r });
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
Beispiel #17
0
        public MSBuildResult Run(
            ProjectConfigurationInfo[] configurations, ILogWriter logWriter, MSBuildVerbosity verbosity,
            string[] runTargets, string[] evaluateItems, string[] evaluateProperties)
        {
            MSBuildResult result = null;

            BuildEngine.RunSTA(delegate {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    buildEngine.Engine.UnregisterAllLoggers();

                    var logger = new LocalLogger(file);
                    buildEngine.Engine.RegisterLogger(logger);
                    if (logWriter != null)
                    {
                        buildEngine.Engine.RegisterLogger(consoleLogger);
                        consoleLogger.Verbosity = GetVerbosity(verbosity);
                    }

                    if (runTargets != null && runTargets.Length > 0)
                    {
                        // We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
                        // an xbuild bug which causes references to not be resolved after the project has been built once.
                        buildEngine.Engine.BuildProject(project, runTargets, new Hashtable(), BuildSettings.None);
                    }

                    result = new MSBuildResult(logger.BuildResult.ToArray());

                    if (evaluateProperties != null)
                    {
                        foreach (var name in evaluateProperties)
                        {
                            result.Properties [name] = project.GetEvaluatedProperty(name);
                        }
                    }

                    if (evaluateItems != null)
                    {
                        foreach (var name in evaluateItems)
                        {
                            BuildItemGroup grp = project.GetEvaluatedItemsByName(name);
                            var list           = new List <MSBuildEvaluatedItem> ();
                            foreach (BuildItem item in grp)
                            {
                                var evItem = new MSBuildEvaluatedItem(name, UnescapeString(item.FinalItemSpec));
                                foreach (DictionaryEntry de in (IDictionary)evaluatedMetadataField.GetValue(item))
                                {
                                    evItem.Metadata [(string)de.Key] = UnescapeString((string)de.Value);
                                }
                                list.Add(evItem);
                            }
                            result.Items[name] = list;
                        }
                    }
                } catch (InvalidProjectFileException ex) {
                    var r = new MSBuildTargetResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    logWriter.WriteLine(r.ToString());
                    result = new MSBuildResult(new [] { r });
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }