コード例 #1
1
        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;
        }
コード例 #2
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;
        }
コード例 #3
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;
            }
コード例 #4
0
		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);
			}
		}
コード例 #5
0
            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);
            }
コード例 #6
0
		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;
		}
コード例 #7
0
ファイル: BuildAll.cs プロジェクト: hivie7510/csharptest-net
        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;
        }
コード例 #8
0
            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);
            }
コード例 #9
0
ファイル: BuildTask.cs プロジェクト: hivie7510/csharptest-net
        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;
        }
コード例 #10
0
        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;
        }
コード例 #11
0
		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;
		}
コード例 #12
0
		protected override int Run(BuildEngine engine)
		{
			engine.ProjectPostBuild += new ProjectPostBuildEventHandler(ProjectPostBuild);
			return 0;
		}
コード例 #13
0
 public ProjectList(BuildEngine engine, FrameworkVersions framework)
 {
     this.Engine = engine;
     _framework  = framework;
 }
コード例 #14
0
            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;
            }
コード例 #15
0
            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;
            }
コード例 #16
0
        protected override int Run(BuildEngine engine)
        {
			if(!_continueOnError)
				engine.ProjectPostBuild += new ProjectPostBuildEventHandler(engine_ProjectPostBuild);
            return 0;
        }
コード例 #17
0
ファイル: Logging.cs プロジェクト: hivie7510/csharptest-net
 protected override int Run(BuildEngine engine)
 {
     engine.SetConsoleLevel(Level);
     return 0;
 }
コード例 #18
0
        protected override int Run(BuildEngine engine)
        {
			foreach (ProjectInfo pi in engine.Projects)
				pi.Properties.SetValue(_name, _value);
            return 0;
        }
コード例 #19
0
ファイル: BuildTask.cs プロジェクト: hivie7510/csharptest-net
 protected abstract int Run(BuildEngine engine);
コード例 #20
0
		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;
		}
コード例 #21
0
		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;
						}
					}
				}
			}
		}
コード例 #22
0
ファイル: Logging.cs プロジェクト: hivie7510/csharptest-net
 protected override int Run(BuildEngine engine)
 {
     engine.SetXmlLogFile(Environment.CurrentDirectory, AbsolutePath, Level);
     return 0;
 }
コード例 #23
0
ファイル: SetGlobal.cs プロジェクト: hivie7510/csharptest-net
 protected override int Run(BuildEngine engine)
 {
     engine.Properties[_name] = _value;
     return 0;
 }
コード例 #24
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;
            }
コード例 #25
0
		void engine_ProjectPostBuild(BuildEngine engine, ProjectPostBuildEventArgs args)
		{
			if (args.BuildFailed)
				args.Cancel = true;
		}
コード例 #26
0
        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;
        }