protected override int Run(BuildEngine engine) { foreach (ProjectInfo item in engine.Projects) { if (!String.IsNullOrEmpty(item.Properties[MSProp.SolutionDir])) continue; //To attempt to gracefully handle those those that use SolutionDir in build rules... string solutiondir = Path.GetDirectoryName(item.ProjectFile); DirectoryInfo parent = new DirectoryInfo(solutiondir); while (parent != null) { if (parent.GetFiles("*.sln").Length > 0) { solutiondir = parent.FullName; break; } parent = parent.Parent; } if (!solutiondir.EndsWith(@"\")) solutiondir += @"\"; item.Properties[MSProp.SolutionDir] = solutiondir; } return 0; }
protected override int Run(BuildEngine engine) { foreach (ProjectInfo pi in engine.Projects) { Dictionary<string, string> constants = new Dictionary<string, string>(); List<string> names = new List<string>(); names.AddRange(String.Format("{0}", pi.Properties[MSProp.DefineConstants]).Split(';')); foreach (string name in _defines) if (name != null) names.AddRange(name.Split(';')); //Add foreach (string name in names) { string tmp = (name ?? String.Empty).Trim(); if (tmp.Length > 0 && tmp[0] != '-') constants[tmp] = tmp[0] == '+' ? tmp.Substring(1) : tmp; } //Remove foreach (string name in names) { string tmp = (name ?? String.Empty).Trim(); if (tmp.Length > 0 && tmp[0] == '-') constants.Remove(tmp.Substring(1)); } names.Clear(); names.AddRange(constants.Keys); names.Sort(); pi.Properties[MSProp.DefineConstants] = String.Join(";", names.ToArray()); } return 0; }
//System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) //{ // AssemblyName asmName = new AssemblyName(args.Name); // string bin = Util.MakeFrameworkBinPath(_framework); // string testDll = Path.Combine(bin, asmName.Name + ".dll"); // if (File.Exists(testDll)) // return Assembly.LoadFile(testDll); // return null; //} public void Dispose() { if (_engine != null) { _engine.Dispose(); } _engine = null; }
void ProjectPostBuild(BuildEngine engine, ProjectPostBuildEventArgs args) { Project proj = args.Project.MsProject; if (proj.IsDirty) { Log.Write(_warningLevel, "Project modified: {0}", proj.FullFileName); proj.Save(proj.FullFileName); } }
BuildEngine CreateEngine(FrameworkVersions toolsVersion) { string dir = Util.MakeFrameworkBinPath(toolsVersion); //if (!CSBuildConfig.ToDictionary(_properties).TryGetValue("FrameworkBIN" + _framework, out dir)) BuildEngine engine = new BuildEngine(toolsVersion, dir); return(engine); }
protected override int Run(BuildEngine engine) { foreach (ProjectInfo pi in engine.Projects) { string value = _value; if (!pi.Properties.IsExpression(_value)) value = FileUtils.MakeRelativePath(pi.ProjectFile, _value); pi.Properties[_name] = value; } return 0; }
protected override int Run(BuildEngine engine) { int errors; BuildOrder order; using (Log.Start("Creating build order for {0} projects.", engine.Projects.Count)) order = engine.Projects.GetBuildOrder(); using (Log.Start("Building all projects")) errors = engine.Build(order, _targets); return errors; }
public int Perform(params BuildTask[] actions) { if (_engine == null) { _engine = CreateEngine(_framework); } int result = 0; foreach (BuildTask task in actions) { result += task.Perform(_engine); } return(result); }
public int Perform(BuildEngine engine) { try { return Run(engine); } catch (ApplicationException ae) { System.Diagnostics.Trace.TraceError(ae.ToString()); Log.Error(ae); } catch (Exception error) { Log.Error(error); } return 1; }
protected override int Run(BuildEngine engine) { Log.Verbose("Loading {0}", _file); try { engine.Projects.Add(_file, _dependencies); return 0; } catch (ApplicationException ae) { System.Diagnostics.Trace.TraceError(ae.ToString()); Log.Error(ae); } catch (Exception error) { Log.Error(error); } return 1; }
protected override int Run(BuildEngine engine) { FrameworkVersions currentTools = engine.Framework; foreach (ProjectInfo item in engine.Projects) { FrameworkVersions myFramework = currentTools; string projFramework = item.Properties[MSProp.TargetFrameworkVersion]; if (!String.IsNullOrEmpty(projFramework)) myFramework = (FrameworkVersions)Enum.Parse(typeof(FrameworkVersions), projFramework.Replace(".", "")); foreach (ReferenceInfo r in item.References) { if (r.RequiresVersion != null) { if (r.RequiresVersion.Value > myFramework) item.References.Remove(r); } } } return 0; }
protected override int Run(BuildEngine engine) { engine.ProjectPostBuild += new ProjectPostBuildEventHandler(ProjectPostBuild); return 0; }
public ProjectList(BuildEngine engine, FrameworkVersions framework) { this.Engine = engine; _framework = framework; }
public int Perform(params BuildTask[] actions) { if(_engine == null) _engine = CreateEngine(_framework); int result = 0; foreach (BuildTask task in actions) result += task.Perform(_engine); return result; }
BuildEngine CreateEngine(FrameworkVersions toolsVersion) { string dir = Util.MakeFrameworkBinPath(toolsVersion); //if (!CSBuildConfig.ToDictionary(_properties).TryGetValue("FrameworkBIN" + _framework, out dir)) BuildEngine engine = new BuildEngine(toolsVersion, dir); return engine; }
protected override int Run(BuildEngine engine) { if(!_continueOnError) engine.ProjectPostBuild += new ProjectPostBuildEventHandler(engine_ProjectPostBuild); return 0; }
protected override int Run(BuildEngine engine) { engine.SetConsoleLevel(Level); return 0; }
protected override int Run(BuildEngine engine) { foreach (ProjectInfo pi in engine.Projects) pi.Properties.SetValue(_name, _value); return 0; }
protected abstract int Run(BuildEngine engine);
protected override int Run(BuildEngine engine) { int errors = 0; engine.ProjectPreBuild += new ProjectPreBuildEventHandler(ProjectPreBuild); foreach (ReferenceFolder fld in _folders) ResolveFiles(fld); ReferenceWorkItem refItem; ProjectInfo refProj; AssemblyName mscorlib = new AssemblyName("mscorlib"); foreach (ProjectInfo project in engine.Projects) { SetOptions(project); bool msCoreFound = false; foreach (ReferenceInfo reference in project.References) { msCoreFound |= StringComparer.OrdinalIgnoreCase.Equals(mscorlib.Name, reference.Assembly.Name); refItem = new ReferenceWorkItem(); if (engine.Projects.TryGetProject(reference, out refProj)) refItem.FullPath = refProj.TargetFullName; else if (!String.IsNullOrEmpty(reference.Assembly.Name) && _assemblyNameToFile.TryGetValue(reference.Assembly.Name, out refItem)) { } else if (!_strict) { continue; } //ignore unknown reference else { if (++errors > 0 && !_failedReferences.ContainsKey(reference.Assembly.Name)) { Log.Error("Unable to locate reference in project {1}\r\n{2}", reference.Assembly, project.ProjectFile, reference.Details); _failedReferences[reference.Assembly.Name] = reference.Assembly.Name; } continue; //failed to locate } if (_noprojectrefs && reference.RefType == ReferenceType.ProjectReference) { if (refProj == null) { Log.Error("Unable to locate project referenced by {1}\r\n{2}", reference.ProjectFile, project.ProjectFile, reference.Details); errors++; } reference.MakeReference(new AssemblyName(refProj.AssemblyName), refItem.FullPath); } else { if ((_strict || !String.IsNullOrEmpty(reference.HintPath)) && !StringComparer.OrdinalIgnoreCase.Equals(reference.HintPath, refItem.FullPath)) reference.HintPath = refItem.FullPath; } if (reference.SpecificVersion == false && reference.Assembly.Version != null) reference.Assembly = new AssemblyName(reference.Assembly.Name); } if (!msCoreFound && _noStdLib) { if (!_strict) project.References.Add(mscorlib); else if (_assemblyNameToFile.TryGetValue(mscorlib.Name, out refItem)) project.References.Add(mscorlib, refItem.FullPath); else { Log.Info("Unable to locate {0} in references.\r\n" + "When enabling no-standard-references and strict-references, you must specify\r\n" + "a reference path that contains the {0}.dll version to use.", mscorlib); throw new ApplicationException(String.Format("Aborted due to missing {0} library.", mscorlib)); } } } return errors; }
void ProjectPreBuild(BuildEngine engine, ProjectPreBuildEventArgs args) { foreach (ProjectInfo project in engine.Projects) { foreach (ReferenceInfo reference in project.References) { if (reference.SpecificVersion) { string filepath = reference.HintPath; if (File.Exists(filepath)) { AssemblyName asmName = AssemblyName.GetAssemblyName(filepath); if (!StringComparer.OrdinalIgnoreCase.Equals(reference.Assembly.ToString(), asmName.ToString())) reference.Assembly = asmName; } } } } }
protected override int Run(BuildEngine engine) { engine.SetXmlLogFile(Environment.CurrentDirectory, AbsolutePath, Level); return 0; }
protected override int Run(BuildEngine engine) { engine.Properties[_name] = _value; return 0; }
//System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) //{ // AssemblyName asmName = new AssemblyName(args.Name); // string bin = Util.MakeFrameworkBinPath(_framework); // string testDll = Path.Combine(bin, asmName.Name + ".dll"); // if (File.Exists(testDll)) // return Assembly.LoadFile(testDll); // return null; //} public void Dispose() { if (_engine != null) _engine.Dispose(); _engine = null; }
void engine_ProjectPostBuild(BuildEngine engine, ProjectPostBuildEventArgs args) { if (args.BuildFailed) args.Cancel = true; }
protected override int Run(BuildEngine engine) { string targetName = String.Join(",", _buildTask.Targets); if (String.IsNullOrEmpty(targetName)) targetName = "(default)"; int errors = 0; if (_target.TextLog != null) errors += new LogFileOutput(_target.TextLog.AbsolutePath(_namedValues), _target.TextLog.Level).Perform(engine); if (_target.XmlLog != null) errors += new XmlFileOutput(_target.XmlLog.AbsolutePath(_namedValues), _target.XmlLog.Level).Perform(engine); //Globals must preceed project loading errors += new SetGlobal(MSProp.Configuration, _target.Configuration).Perform(engine); errors += new SetGlobal(MSProp.Platform, _target.Platform.ToString()).Perform(engine); foreach (KeyValuePair<string,string> property in _properties) engine.Properties.SetValue(property.Key, property.Value); foreach (BuildProperty prop in _target.BuildProperties) if (prop.IsGlobal) engine.Properties.SetValue(prop.Name, Environment.ExpandEnvironmentVariables(prop.Value)); Log.Info("CSBuild {0} {1} - Runtime={2}, Configuration={3}, Platform={4}", targetName.ToLower(), _target.GroupName.ToLower(), engine.Framework.ToString().Insert(2,"."), engine.Properties[MSProp.Configuration], engine.Properties[MSProp.Platform]); //Add projects ProjectFinder projects = new ProjectFinder(this); projects.Add(_config.Projects.AddProjects); projects.Add(_target.AddProjects); projects.Remove(_config.Projects.RemoveProjects); projects.Remove(_target.RemoveProjects); errors += projects.Perform(engine); if (errors > 0 && !_config.Options.ContinueOnError) return errors; //Add #defines List<string> defines = new List<string>(); foreach (BuildDefineConst define in _target.DefineConstants) defines.Add(define.Value); if (defines.Count > 0) errors += new DefineConstants(defines.ToArray()).Perform(engine); //Project configuration foreach (BuildProperty property in _target.BuildProperties) if(!property.IsGlobal) errors += new SetProjectProperty(property.Name, Environment.ExpandEnvironmentVariables(property.Value)).Perform(engine); if (_target.TargetFramework != null) errors += new SetProjectProperty(MSProp.TargetFrameworkVersion, _target.TargetFramework.Version.ToString().Insert(2, ".")).Perform(engine); if(_target.OutputPath != null) errors += new SetProjectPathProperty(MSProp.OutputPath, _target.OutputPath.AbsolutePath(_namedValues)).Perform(engine); if(_target.IntermediateFiles != null) errors += new SetProjectPathProperty(MSProp.IntermediateOutputPath, _target.IntermediateFiles.AbsolutePath(_namedValues)).Perform(engine); errors += new SetSolutionDir().Perform(engine); errors += new NewerFrameworkReferences().Perform(engine); EnforceReferences folders = new EnforceReferences(engine.Framework, _namedValues, _config.Options.StrictReferences, _config.Options.NoStdReferences, _config.Options.ForceReferencesToFile); folders.Add(_config.Projects.ReferenceFolders); folders.Add(_target.ReferenceFolders); errors += folders.Perform(engine); if (errors > 0 && !_config.Options.ContinueOnError) return errors; System.Diagnostics.TraceLevel warningLevel; bool saveChanges = _config.Options.SaveProjectChanges(out warningLevel); if (_target.SaveProjectChanges != null) { saveChanges = _target.SaveProjectChanges.Enabled; warningLevel = _target.SaveProjectChanges.LogLevel; } if(saveChanges) errors += new SaveModifiedProjects(warningLevel).Perform(engine); //Build it errors += _buildTask.Perform(engine); return errors; }