2 // Main.cs: Main program file of command line utility.
5 // Marek Sieradzki (marek.sieradzki@gmail.com)
7 // (C) 2005 Marek Sieradzki
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using System
.Collections
;
33 using System
.Reflection
;
34 using Microsoft
.Build
.BuildEngine
;
35 using Microsoft
.Build
.Framework
;
36 using Microsoft
.Build
.Utilities
;
37 using Mono
.XBuild
.Framework
;
39 namespace Mono
.XBuild
.CommandLine
{
40 public class MainClass
{
42 Parameters parameters
;
50 public static void Main (string[] args
)
52 MainClass mc
= new MainClass ();
59 binPath
= ToolLocationHelper
.GetPathToDotNetFramework (TargetDotNetFrameworkVersion
.Version20
);
60 defaultSchema
= Path
.Combine (binPath
, "Microsoft.Build.xsd");
61 parameters
= new Parameters (binPath
);
64 public void Execute ()
69 parameters
.ParseArguments (args
);
71 if (parameters
.DisplayVersion
)
72 ErrorUtilities
.ShowVersion (false);
74 engine
= new Engine (binPath
);
76 engine
.GlobalProperties
= this.parameters
.Properties
;
78 if (!parameters
.NoConsoleLogger
) {
79 ConsoleLogger cl
= new ConsoleLogger ();
80 cl
.Parameters
= parameters
.ConsoleLoggerParameters
;
81 cl
.Verbosity
= parameters
.LoggerVerbosity
;
82 engine
.RegisterLogger (cl
);
85 foreach (LoggerInfo li
in parameters
.Loggers
) {
87 if (li
.InfoType
== LoadInfoType
.AssemblyFilename
)
88 assembly
= Assembly
.LoadFrom (li
.Filename
);
90 assembly
= Assembly
.Load (li
.AssemblyName
);
91 ILogger logger
= (ILogger
)Activator
.CreateInstance (assembly
.GetType (li
.ClassName
));
92 logger
.Parameters
= li
.Parameters
;
93 engine
.RegisterLogger (logger
);
96 project
= engine
.CreateNewProject ();
98 if (parameters
.Validate
) {
99 if (parameters
.ValidationSchema
== null)
100 project
.SchemaFile
= defaultSchema
;
102 project
.SchemaFile
= parameters
.ValidationSchema
;
105 string projectFile
= parameters
.ProjectFile
;
106 if (projectFile
.EndsWith (".sln"))
107 projectFile
= GenerateSolutionProject (projectFile
);
109 project
.Load (projectFile
);
111 result
= engine
.BuildProject (project
, parameters
.Targets
, null);
114 catch (InvalidProjectFileException ipfe
) {
115 ErrorUtilities
.ReportError (0, ipfe
.Message
);
118 catch (InternalLoggerException ile
) {
119 ErrorUtilities
.ReportError (0, ile
.Message
);
128 engine
.UnregisterAllLoggers ();
130 Environment
.Exit (result
? 0 : 1);
135 string GenerateSolutionProject (string solutionFile
)
137 SolutionParser s
= new SolutionParser ();
138 Project p
= engine
.CreateNewProject ();
139 s
.ParseSolution (solutionFile
, p
);
140 string projectFile
= solutionFile
+ ".proj";
141 p
.Save (projectFile
);