コード例 #1
0
        async Task CheckSolutionBuildClean(Solution sol, string configuration)
        {
            SolutionConfigurationSelector config = (SolutionConfigurationSelector)configuration;
            string        tag  = "CheckSolutionBuildClean config=" + configuration;
            DotNetProject lib1 = (DotNetProject)sol.FindProjectByName("Lib1");
            DotNetProject lib2 = (DotNetProject)sol.FindProjectByName("Lib2");
            DotNetProject lib3 = (DotNetProject)sol.FindProjectByName("Lib3");
            DotNetProject lib4 = (DotNetProject)sol.FindProjectByName("Lib4");

            Assert.IsFalse(File.Exists(lib1.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib2.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib3.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib4.GetOutputFileName(config)), tag);

            BuildResult res = await sol.Build(Util.GetMonitor(), config);

            Assert.AreEqual(0, res.WarningCount, tag);
            Assert.AreEqual(0, res.ErrorCount, tag);

            Assert.IsTrue(File.Exists(lib1.GetOutputFileName(config)), tag);
            Assert.IsTrue(File.Exists(lib2.GetOutputFileName(config)), tag);
            Assert.IsTrue(File.Exists(lib3.GetOutputFileName(config)), tag);
            Assert.IsTrue(File.Exists(lib4.GetOutputFileName(config)), tag);

            await sol.Clean(Util.GetMonitor(), config);

            Assert.IsFalse(File.Exists(lib1.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib2.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib3.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib4.GetOutputFileName(config)), tag);
        }
コード例 #2
0
        void CheckProjectReferencesBuildClean(Solution sol, string configuration)
        {
            SolutionConfigurationSelector config = (SolutionConfigurationSelector)configuration;
            string        tag  = "CheckProjectReferencesBuildClean config=" + configuration;
            DotNetProject lib1 = (DotNetProject)sol.FindProjectByName("Lib1");
            DotNetProject lib2 = (DotNetProject)sol.FindProjectByName("Lib2");
            DotNetProject lib3 = (DotNetProject)sol.FindProjectByName("Lib3");
            DotNetProject lib4 = (DotNetProject)sol.FindProjectByName("Lib4");

            Assert.IsFalse(File.Exists(lib1.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib2.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib3.GetOutputFileName(config)), tag);
            Assert.IsFalse(File.Exists(lib4.GetOutputFileName(config)), tag);

            BuildResult res = lib1.Build(Util.GetMonitor(), config, true);

            Assert.AreEqual(0, res.WarningCount, tag);
            Assert.AreEqual(0, res.ErrorCount, tag + " " + res.CompilerOutput);

            Assert.IsTrue(File.Exists(lib1.GetOutputFileName(config)), tag);
            Assert.IsTrue(File.Exists(lib2.GetOutputFileName(config)), tag);
            Assert.IsTrue(File.Exists(lib3.GetOutputFileName(config)), tag);
            Assert.IsTrue(File.Exists(lib4.GetOutputFileName(config)), tag);

            sol.Clean(Util.GetMonitor(), config);
        }
コード例 #3
0
		public void NeedsBuilding ()
		{
			string solFile = Util.GetSampleProject ("console-with-libs-mdp", "console-with-libs-mdp.mds");
			
			Solution sol = (Solution) Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solFile);
			DotNetProject p = (DotNetProject) sol.FindProjectByName ("console-with-libs-mdp");
			Assert.IsNotNull (p);
			DotNetProject lib1 = (DotNetProject) sol.FindProjectByName ("library1");
			Assert.IsNotNull (lib1);
			DotNetProject lib2 = (DotNetProject) sol.FindProjectByName ("library2");
			Assert.IsNotNull (lib2);
			
			SolutionConfigurationSelector config = (SolutionConfigurationSelector) "Debug";
			
			Assert.IsTrue (p.NeedsBuilding (config));
			Assert.IsTrue (lib1.NeedsBuilding (config));
			Assert.IsTrue (lib2.NeedsBuilding (config));
			
			// Build the project and the references
			
			BuildResult res = p.Build (Util.GetMonitor (), config, true);
			foreach (BuildError er in res.Errors)
				Console.WriteLine (er.ToString ());
			Assert.AreEqual (0, res.ErrorCount);
			Assert.AreEqual (0, res.WarningCount);
			Assert.AreEqual (3, res.BuildCount);
			Assert.IsFalse (p.NeedsBuilding (config));
			Assert.IsFalse (lib1.NeedsBuilding (config));
			Assert.IsFalse (lib2.NeedsBuilding (config));
			
			Assert.IsTrue (File.Exists (Util.Combine (p.BaseDirectory, "bin", "Debug", "console-with-libs-mdp.exe")));
			Assert.IsTrue (File.Exists (Util.Combine (p.BaseDirectory, "bin", "Debug", GetMdb ("console-with-libs-mdp.exe"))));
			Assert.IsTrue (File.Exists (Util.Combine (lib1.BaseDirectory, "bin", "Debug", "library1.dll")));
			Assert.IsTrue (File.Exists (Util.Combine (lib1.BaseDirectory, "bin", "Debug", GetMdb ("library1.dll"))));
			Assert.IsTrue (File.Exists (Util.Combine (lib2.BaseDirectory, "bin", "Debug", "library2.dll")));
			Assert.IsTrue (File.Exists (Util.Combine (lib2.BaseDirectory, "bin", "Debug", GetMdb ("library2.dll"))));
			
			// Build the project, but not the references
			
			p.SetNeedsBuilding (true);
			lib1.SetNeedsBuilding (true);
			lib2.SetNeedsBuilding (true);
			Assert.IsTrue (p.NeedsBuilding (config));
			Assert.IsTrue (lib1.NeedsBuilding (config));
			Assert.IsTrue (lib2.NeedsBuilding (config));
			
			res = p.Build (Util.GetMonitor (), config, false);
			Assert.AreEqual (0, res.ErrorCount);
			Assert.AreEqual (0, res.WarningCount);
			Assert.AreEqual (1, res.BuildCount);
			Assert.IsTrue (p.NeedsBuilding (config));   // True because references require building
			Assert.IsTrue (lib1.NeedsBuilding (config));
			Assert.IsTrue (lib2.NeedsBuilding (config));
		}
コード例 #4
0
ファイル: SolutionTests.cs プロジェクト: zcf7822/monodevelop
        public async Task NeedsBuilding()
        {
            string solFile = Util.GetSampleProject("console-with-libs", "console-with-libs.sln");

            Solution sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);

            DotNetProject p = (DotNetProject)sol.FindProjectByName("console-with-libs");

            Assert.IsNotNull(p);
            DotNetProject lib1 = (DotNetProject)sol.FindProjectByName("library1");

            Assert.IsNotNull(lib1);
            DotNetProject lib2 = (DotNetProject)sol.FindProjectByName("library2");

            Assert.IsNotNull(lib2);

            SolutionConfigurationSelector config = (SolutionConfigurationSelector)"Debug";

#pragma warning disable 618
            Assert.IsTrue(p.NeedsBuilding(config));
            Assert.IsTrue(lib1.NeedsBuilding(config));
            Assert.IsTrue(lib2.NeedsBuilding(config));
#pragma warning restore 618

            // Build the project and the references

            BuildResult res = await p.Build(Util.GetMonitor(), config, true);

            foreach (BuildError er in res.Errors)
            {
                Console.WriteLine(er);
            }
            Assert.AreEqual(0, res.ErrorCount);
            Assert.AreEqual(0, res.WarningCount);
            Assert.AreEqual(3, res.BuildCount);

            Assert.IsTrue(File.Exists(Util.Combine(p.BaseDirectory, "bin", "Debug", "console-with-libs.exe")));
            Assert.IsTrue(File.Exists(Util.Combine(p.BaseDirectory, "bin", "Debug", GetMdb(p, "console-with-libs.exe"))));
            Assert.IsTrue(File.Exists(Util.Combine(lib1.BaseDirectory, "bin", "Debug", "library1.dll")));
            Assert.IsTrue(File.Exists(Util.Combine(lib1.BaseDirectory, "bin", "Debug", GetMdb(lib1, "library1.dll"))));
            Assert.IsTrue(File.Exists(Util.Combine(lib2.BaseDirectory, "bin", "Debug", "library2.dll")));
            Assert.IsTrue(File.Exists(Util.Combine(lib2.BaseDirectory, "bin", "Debug", GetMdb(lib2, "library2.dll"))));

            // Build the project, but not the references

            res = await p.Build(Util.GetMonitor(), config, false);

            Assert.AreEqual(0, res.ErrorCount);
            Assert.AreEqual(0, res.WarningCount);
            Assert.AreEqual(1, res.BuildCount);

            sol.Dispose();
        }
コード例 #5
0
		void CheckProjectBuildClean (DotNetProject lib, string configuration)
		{
			SolutionConfigurationSelector config = (SolutionConfigurationSelector) configuration;
			string tag = "CheckProjectBuildClean lib=" + lib.Name + " config=" + configuration;
			
			Assert.IsFalse (File.Exists (lib.GetOutputFileName (config)), tag);
			
			BuildResult res = lib.Build (Util.GetMonitor (), config, false);
			Assert.AreEqual (0, res.WarningCount, tag);
			Assert.AreEqual (0, res.ErrorCount, tag);
			
			Assert.IsTrue (File.Exists (lib.GetOutputFileName (config)), tag);
			
			lib.Clean (Util.GetMonitor (), config);
			Assert.IsFalse (File.Exists (lib.GetOutputFileName (config)), tag);
		}
コード例 #6
0
        public async Task FastBuildCheckWithLibrary()
        {
            string   solFile = Util.GetSampleProject("fast-build-test", "FastBuildTest.sln");
            Solution sol     = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);

            var app = (DotNetProject)sol.Items [0];
            var lib = (DotNetProject)sol.Items [1];

            var cs = new SolutionConfigurationSelector("Debug");

            Assert.IsTrue(app.FastCheckNeedsBuild(cs));
            Assert.IsTrue(lib.FastCheckNeedsBuild(cs));

            var res = await sol.Build(Util.GetMonitor(), cs);

            Assert.IsFalse(res.HasErrors);
            Assert.IsFalse(app.FastCheckNeedsBuild(cs));
            Assert.IsFalse(lib.FastCheckNeedsBuild(cs));

            var myClass = sol.ItemDirectory.Combine("MyClass.cs");

            File.WriteAllText(myClass, "public class MyClass { public const string Message = \"Bye\" ; }");
            FileService.NotifyFileChanged(myClass);

            Assert.IsTrue(app.FastCheckNeedsBuild(cs));
            Assert.IsTrue(lib.FastCheckNeedsBuild(cs));

            res = await lib.Build(Util.GetMonitor(), cs);

            Assert.IsFalse(res.HasErrors);
            Assert.IsFalse(lib.FastCheckNeedsBuild(cs));
            Assert.IsTrue(app.FastCheckNeedsBuild(cs));

            res = await app.Build(Util.GetMonitor(), cs);

            Assert.IsFalse(res.HasErrors);
            Assert.IsFalse(lib.FastCheckNeedsBuild(cs));
            Assert.IsFalse(app.FastCheckNeedsBuild(cs));

            sol.Dispose();
        }
コード例 #7
0
		public int Run (string[] arguments)
		{
			Console.WriteLine ("MonoDevelop Build Tool");
			foreach (string s in arguments)
				ReadArgument (s);
			
			if (help) {
				Console.WriteLine ("build [options] [build-file]");
				Console.WriteLine ("-p --project:PROJECT  Name of the project to build.");
				Console.WriteLine ("-t --target:TARGET    Name of the target: Build or Clean.");
				Console.WriteLine ("-c --configuration:CONFIGURATION  Name of the solution configuration to build.");
				Console.WriteLine ("-r --runtime:PREFIX  Prefix of the Mono runtime to build against.");
				Console.WriteLine ();
				Console.WriteLine ("Supported targets:");
				Console.WriteLine ("  {0}: build the project (the default target).", ProjectService.BuildTarget);
				Console.WriteLine ("  {0}: clean the project.", ProjectService.CleanTarget);
				Console.WriteLine ();
				return 0;
			}
			
			string solFile = null;
			string itemFile = null;
			
			if (file == null) {
				string[] files = Directory.GetFiles (".");
				foreach (string f in files) {
					if (Services.ProjectService.IsWorkspaceItemFile (f)) {
						solFile = f;
						break;
					} else if (itemFile == null && Services.ProjectService.IsSolutionItemFile (f))
						itemFile = f;
				}
				if (solFile == null && itemFile == null) {
					Console.WriteLine ("Project file not found.");
					return 1;
				}
			} else {
				if (Services.ProjectService.IsWorkspaceItemFile (file))
				    solFile = file;
				else if (Services.ProjectService.IsSolutionItemFile (file))
					itemFile = file;
				else {
					Console.WriteLine ("File '{0}' is not a project or solution.", file);
					return 1;
				}
			}
			
			ConsoleProgressMonitor monitor = new ConsoleProgressMonitor ();

			TargetRuntime targetRuntime = null;
			TargetRuntime defaultRuntime = Runtime.SystemAssemblyService.DefaultRuntime;
			if (runtime != null)
			{
				targetRuntime = MonoTargetRuntimeFactory.RegisterRuntime(new MonoRuntimeInfo(runtime));
				if (targetRuntime != null)
					Runtime.SystemAssemblyService.DefaultRuntime = targetRuntime;
			}

			IBuildTarget item;
			if (solFile != null)
				item = Services.ProjectService.ReadWorkspaceItem (monitor, solFile);
			else
				item = Services.ProjectService.ReadSolutionItem (monitor, itemFile);
			
			if (project != null) {
				Solution solution = item as Solution;
				item = null;
				
				if (solution != null) {
					item = solution.FindProjectByName (project);
				}
				if (item == null) {
					Console.WriteLine ("The project '" + project + "' could not be found in " + file);
					return 1;
				}
			}

			IConfigurationTarget configTarget = item as IConfigurationTarget;
			if (config == null && configTarget != null)
				config = configTarget.DefaultConfigurationId;
			
			ConfigurationSelector configuration;
			if (item is SolutionEntityItem)
				configuration = new ItemConfigurationSelector (config);
			else
				configuration = new SolutionConfigurationSelector (config);
			
			monitor = new ConsoleProgressMonitor ();
			BuildResult res = item.RunTarget (monitor, command, configuration);

			if (targetRuntime != null)
			{
				Runtime.SystemAssemblyService.DefaultRuntime = defaultRuntime;
				MonoTargetRuntimeFactory.UnregisterRuntime((MonoTargetRuntime) targetRuntime);
			}

			return (res == null || res.ErrorCount == 0) ? 0 : 1;
		}
コード例 #8
0
        public int Run(string[] arguments)
        {
            Console.WriteLine("MonoDevelop Build Tool");
            foreach (string s in arguments)
            {
                ReadArgument(s);
            }

            if (help)
            {
                Console.WriteLine("build [options] [build-file]");
                Console.WriteLine("-p --project:PROJECT  Name of the project to build.");
                Console.WriteLine("-t --target:TARGET    Name of the target: Build or Clean.");
                Console.WriteLine("-c --configuration:CONFIGURATION  Name of the solution configuration to build.");
                Console.WriteLine();
                Console.WriteLine("Supported targets:");
                Console.WriteLine("  {0}: build the project (the default target).", ProjectService.BuildTarget);
                Console.WriteLine("  {0}: clean the project.", ProjectService.CleanTarget);
                Console.WriteLine();
                return(0);
            }

            string solFile  = null;
            string itemFile = null;

            if (file == null)
            {
                string[] files = Directory.GetFiles(".");
                foreach (string f in files)
                {
                    if (Services.ProjectService.IsWorkspaceItemFile(f))
                    {
                        solFile = f;
                        break;
                    }
                    else if (itemFile == null && Services.ProjectService.IsSolutionItemFile(f))
                    {
                        itemFile = f;
                    }
                }
                if (solFile == null && itemFile == null)
                {
                    Console.WriteLine("Project file not found.");
                    return(1);
                }
            }
            else
            {
                if (Services.ProjectService.IsWorkspaceItemFile(file))
                {
                    solFile = file;
                }
                else if (Services.ProjectService.IsSolutionItemFile(file))
                {
                    itemFile = file;
                }
                else
                {
                    Console.WriteLine("File '{0}' is not a project or solution.", file);
                    return(1);
                }
            }

            ConsoleProgressMonitor monitor = new ConsoleProgressMonitor();

            IBuildTarget item;

            if (solFile != null)
            {
                item = Services.ProjectService.ReadWorkspaceItem(monitor, solFile);
            }
            else
            {
                item = Services.ProjectService.ReadSolutionItem(monitor, itemFile);
            }

            if (project != null)
            {
                Solution solution = item as Solution;
                item = null;

                if (solution != null)
                {
                    item = solution.FindProjectByName(project);
                }
                if (item == null)
                {
                    Console.WriteLine("The project '" + project + "' could not be found in " + file);
                    return(1);
                }
            }

            IConfigurationTarget configTarget = item as IConfigurationTarget;

            if (config == null && configTarget != null)
            {
                config = configTarget.DefaultConfigurationId;
            }

            ConfigurationSelector configuration;

            if (item is SolutionEntityItem)
            {
                configuration = new ItemConfigurationSelector(config);
            }
            else
            {
                configuration = new SolutionConfigurationSelector(config);
            }

            monitor = new ConsoleProgressMonitor();
            BuildResult res = item.RunTarget(monitor, command, configuration);

            return((res == null || res.ErrorCount == 0) ? 0 : 1);
        }
コード例 #9
0
ファイル: BuildTool.cs プロジェクト: miaojiang1/monodevelop-1
        public int Run(string[] arguments)
        {
            Console.WriteLine(BrandingService.BrandApplicationName("MonoDevelop Build Tool"));
            foreach (string s in arguments)
            {
                ReadArgument(s);
            }

            if (help)
            {
                Console.WriteLine("build [options] [build-file]");
                Console.WriteLine("-p --project:PROJECT  Name of the project to build.");
                Console.WriteLine("-t --target:TARGET    Name of the target: Build or Clean.");
                Console.WriteLine("-c --configuration:CONFIGURATION  Name of the solution configuration to build.");
                Console.WriteLine("-r --runtime:PREFIX   Prefix of the Mono runtime to build against.");
                Console.WriteLine();
                Console.WriteLine("Supported targets:");
                Console.WriteLine("  {0}: build the project (the default target).", ProjectService.BuildTarget);
                Console.WriteLine("  {0}: clean the project.", ProjectService.CleanTarget);
                Console.WriteLine();
                return(0);
            }

            string solFile  = null;
            string itemFile = null;

            if (file == null)
            {
                string[] files = Directory.GetFiles(".");
                foreach (string f in files)
                {
                    if (Services.ProjectService.IsWorkspaceItemFile(f))
                    {
                        solFile = f;
                        break;
                    }
                    else if (itemFile == null && Services.ProjectService.IsSolutionItemFile(f))
                    {
                        itemFile = f;
                    }
                }
                if (solFile == null && itemFile == null)
                {
                    Console.WriteLine("Project file not found.");
                    return(1);
                }
            }
            else
            {
                if (Services.ProjectService.IsWorkspaceItemFile(file))
                {
                    solFile = file;
                }
                else if (Services.ProjectService.IsSolutionItemFile(file))
                {
                    itemFile = file;
                }
                else
                {
                    Console.WriteLine("File '{0}' is not a project or solution.", file);
                    return(1);
                }
            }

            IProgressMonitor monitor = new ConsoleProjectLoadProgressMonitor(new ConsoleProgressMonitor());

            TargetRuntime targetRuntime  = null;
            TargetRuntime defaultRuntime = Runtime.SystemAssemblyService.DefaultRuntime;

            if (runtime != null)
            {
                targetRuntime = MonoTargetRuntimeFactory.RegisterRuntime(new MonoRuntimeInfo(runtime));
                if (targetRuntime != null)
                {
                    Runtime.SystemAssemblyService.DefaultRuntime = targetRuntime;
                }
            }

            IBuildTarget item;

            if (solFile != null)
            {
                item = Services.ProjectService.ReadWorkspaceItem(monitor, solFile);
            }
            else
            {
                item = Services.ProjectService.ReadSolutionItem(monitor, itemFile);
            }

            using (var readItem = item) {
                if (project != null)
                {
                    Solution solution = item as Solution;
                    item = null;

                    if (solution != null)
                    {
                        item = solution.FindProjectByName(project);
                    }
                    if (item == null)
                    {
                        Console.WriteLine("The project '" + project + "' could not be found in " + file);
                        return(1);
                    }
                }

                IConfigurationTarget configTarget = item as IConfigurationTarget;
                if (config == null && configTarget != null)
                {
                    config = configTarget.DefaultConfigurationId;
                }

                monitor = new ConsoleProgressMonitor();
                BuildResult res = null;
                if (item is SolutionEntityItem && ((SolutionEntityItem)item).ParentSolution == null)
                {
                    ConfigurationSelector configuration = new ItemConfigurationSelector(config);
                    res = item.RunTarget(monitor, command, configuration);
                }
                else
                {
                    ConfigurationSelector configuration      = new SolutionConfigurationSelector(config);
                    SolutionEntityItem    solutionEntityItem = item as SolutionEntityItem;
                    if (solutionEntityItem != null)
                    {
                        if (command == ProjectService.BuildTarget)
                        {
                            res = solutionEntityItem.Build(monitor, configuration, true);
                        }
                        else if (command == ProjectService.CleanTarget)
                        {
                            solutionEntityItem.Clean(monitor, configuration);
                        }
                        else
                        {
                            res = item.RunTarget(monitor, command, configuration);
                        }
                    }
                    else
                    {
                        res = item.RunTarget(monitor, command, configuration);
                    }
                }


                if (targetRuntime != null)
                {
                    Runtime.SystemAssemblyService.DefaultRuntime = defaultRuntime;
                    MonoTargetRuntimeFactory.UnregisterRuntime((MonoTargetRuntime)targetRuntime);
                }

                if (res != null)
                {
                    foreach (var err in res.Errors)
                    {
                        Console.Error.WriteLine(err);
                    }
                }

                return((res == null || res.ErrorCount == 0) ? 0 : 1);
            }
        }
コード例 #10
0
		public async Task FastBuildCheckWithLibrary ()
		{
			string solFile = Util.GetSampleProject ("fast-build-test", "FastBuildTest.sln");
			Solution sol = (Solution)await Services.ProjectService.ReadWorkspaceItem (Util.GetMonitor (), solFile);
			var app = (DotNetProject)sol.Items [0];
			var lib = (DotNetProject)sol.Items [1];

			var cs = new SolutionConfigurationSelector ("Debug");

			Assert.IsTrue (app.FastCheckNeedsBuild (cs));
			Assert.IsTrue (lib.FastCheckNeedsBuild (cs));

			var res = await sol.Build (Util.GetMonitor (), cs);
			Assert.IsFalse (res.HasErrors);
			Assert.IsFalse (app.FastCheckNeedsBuild (cs));
			Assert.IsFalse (lib.FastCheckNeedsBuild (cs));

			var myClass = sol.ItemDirectory.Combine ("MyClass.cs");
			File.WriteAllText (myClass, "public class MyClass { public const string Message = \"Bye\" ; }");
			FileService.NotifyFileChanged (myClass);

			Assert.IsTrue (app.FastCheckNeedsBuild (cs));
			Assert.IsTrue (lib.FastCheckNeedsBuild (cs));

			res = await lib.Build (Util.GetMonitor (), cs);
			Assert.IsFalse (res.HasErrors);
			Assert.IsFalse (lib.FastCheckNeedsBuild (cs));
			Assert.IsTrue (app.FastCheckNeedsBuild (cs));

			res = await app.Build (Util.GetMonitor (), cs);
			Assert.IsFalse (res.HasErrors);
			Assert.IsFalse (lib.FastCheckNeedsBuild (cs));
			Assert.IsFalse (app.FastCheckNeedsBuild (cs));
		}