Browse Source

update Prebuild with WhiteCore version

UbitUmarov 6 years ago
parent
commit
41e8b9f91f
54 changed files with 8861 additions and 8759 deletions
  1. 14 0
      Prebuild/ChangeLog
  2. 7 5
      Prebuild/prebuild.xml
  3. 42 42
      Prebuild/src/Core/Attributes/DataNodeAttribute.cs
  4. 42 42
      Prebuild/src/Core/Attributes/OptionNodeAttribute.cs
  5. 42 42
      Prebuild/src/Core/Attributes/TargetAttribute.cs
  6. 57 57
      Prebuild/src/Core/FatalException.cs
  7. 26 26
      Prebuild/src/Core/Interfaces/IDataNode.cs
  8. 31 31
      Prebuild/src/Core/Interfaces/ITarget.cs
  9. 707 696
      Prebuild/src/Core/Kernel.cs
  10. 62 62
      Prebuild/src/Core/Nodes/AuthorNode.cs
  11. 9 9
      Prebuild/src/Core/Nodes/CleanFilesNode.cs
  12. 37 37
      Prebuild/src/Core/Nodes/CleanupNode.cs
  13. 186 186
      Prebuild/src/Core/Nodes/ConfigurationNode.cs
  14. 45 45
      Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs
  15. 86 86
      Prebuild/src/Core/Nodes/DataNode.cs
  16. 3 3
      Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs
  17. 62 62
      Prebuild/src/Core/Nodes/DescriptionNode.cs
  18. 39 39
      Prebuild/src/Core/Nodes/ExcludeNode.cs
  19. 228 228
      Prebuild/src/Core/Nodes/FileNode.cs
  20. 142 142
      Prebuild/src/Core/Nodes/FilesNode.cs
  21. 229 229
      Prebuild/src/Core/Nodes/MatchNode.cs
  22. 589 589
      Prebuild/src/Core/Nodes/OptionsNode.cs
  23. 83 83
      Prebuild/src/Core/Nodes/ProcessNode.cs
  24. 516 486
      Prebuild/src/Core/Nodes/ProjectNode.cs
  25. 109 109
      Prebuild/src/Core/Nodes/ReferenceNode.cs
  26. 62 62
      Prebuild/src/Core/Nodes/ReferencePathNode.cs
  27. 258 258
      Prebuild/src/Core/Nodes/SolutionNode.cs
  28. 134 134
      Prebuild/src/Core/Parse/IfContext.cs
  29. 544 544
      Prebuild/src/Core/Parse/Preprocessor.cs
  30. 7 7
      Prebuild/src/Core/Targets/AutotoolsTarget.cs
  31. 55 55
      Prebuild/src/Core/Targets/DebugTarget.cs
  32. 10 10
      Prebuild/src/Core/Targets/MakefileTarget.cs
  33. 482 482
      Prebuild/src/Core/Targets/MonoDevelopTarget.cs
  34. 398 373
      Prebuild/src/Core/Targets/NAntTarget.cs
  35. 44 44
      Prebuild/src/Core/Targets/SharpDevelop2Target.cs
  36. 397 397
      Prebuild/src/Core/Targets/SharpDevelopTarget.cs
  37. 178 178
      Prebuild/src/Core/Targets/ToolInfo.cs
  38. 57 57
      Prebuild/src/Core/Targets/VS2002Target.cs
  39. 566 566
      Prebuild/src/Core/Targets/VS2003Target.cs
  40. 13 13
      Prebuild/src/Core/Targets/VS2005Target.cs
  41. 90 90
      Prebuild/src/Core/Targets/VS2008Target.cs
  42. 102 102
      Prebuild/src/Core/Targets/VS2010Target.cs
  43. 886 880
      Prebuild/src/Core/Targets/VSGenericTarget.cs
  44. 46 33
      Prebuild/src/Core/Targets/VSVersion.cs
  45. 12 12
      Prebuild/src/Core/Targets/XcodeTarget.cs
  46. 38 38
      Prebuild/src/Core/UnknownLanguageException.cs
  47. 127 127
      Prebuild/src/Core/Utilities/CommandLineCollection.cs
  48. 40 40
      Prebuild/src/Core/Utilities/CurrentDirectory.cs
  49. 518 518
      Prebuild/src/Core/Utilities/Helper.cs
  50. 217 217
      Prebuild/src/Core/Utilities/Log.cs
  51. 56 56
      Prebuild/src/Core/WarningException.cs
  52. 118 118
      Prebuild/src/Prebuild.cs
  53. 13 12
      Prebuild/src/Properties/AssemblyInfo.cs
  54. BIN
      bin/Prebuild.exe

+ 14 - 0
Prebuild/ChangeLog

@@ -1,3 +1,17 @@
+2015, June	Fly-Man- <[email protected]>
+	* V2.0.7	(WhiteCore Build)
+	* Added the VS2012/VS2013 targets so .Net 4.5 can be used for WhiteCore
+	* Cleaned up the SharpDevelop2 code part
+	
+2015, April  rowan Deppeler <[email protected]>
+	* V2.0.6w	(WhiteCore build
+	* No changes to the code as it appears development has now stalled at 1.10
+	- Incorporated (Rev's, I think) patches from Aurora to provide for passing the framework
+	 and additional conditionals in the Prebuild.xml spec
+	- Re-built using Net 4.0 framework to provide for use on unmodified Windows 8 systems (No Net 3.5) 
+	- Included Solution and project files to assist building if required 
+
+
 2008-12-09T02:15	D. Moonfire <[email protected]>
 	* src/Core/Kernel.cs
 	- Added a /ppi target to get the results of processing but before

+ 7 - 5
Prebuild/prebuild.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <Prebuild xmlns="http://dnpb.sourceforge.net/schemas/prebuild-1.10.xsd" version="1.10">
-	<Solution name="Prebuild" version="2.0.6">
+	<Solution name="Prebuild" version="2.0.7">
 		<Configuration name="Debug">
 			<Options>
 				<CompilerDefines>DEBUG;TRACE</CompilerDefines>
@@ -21,7 +21,6 @@
 		</Configuration>
 		<Files>
 			<File>prebuild.xml</File>
-			<File>prebuild</File>
 		</Files>
 		<Project name="Prebuild"
 		         path="src"
@@ -31,8 +30,8 @@
 		         type="Exe"
 		         rootNamespace="Prebuild"
 		         startupObject="Prebuild.Prebuild"
-		         version="2.0.6"
-		         frameworkVersion="v3_5"
+		         version="2.0.7"
+		         frameworkVersion="v4_0"
 		>
 			<Author>Matthew Holmes ([email protected])</Author>
 			<Author>Dan Moorehead ([email protected])</Author>
@@ -40,6 +39,7 @@
 			<Author>Rob Loach (http://robloach.net)</Author>
 			<Author>C.J. Adams-Collier ([email protected])</Author>
 			<Author>John Hurliman ([email protected])</Author>
+			<Author>WhiteCore build (2015) Rowan Deppeler ([email protected])</Author>
 			<Description>The Prebuild project generator</Description>
 			<Configuration name="Debug">
 				<Options>
@@ -68,7 +68,9 @@
 				<Match pattern="App.ico" buildAction="EmbeddedResource"/>
 				<Match path="data" pattern="prebuild-1.10.xsd" buildAction="EmbeddedResource"/>
 				<Match path="data" pattern="autotools.xml" buildAction="EmbeddedResource"/>
-				<Match pattern="*.cs" recurse="true"/>
+				<Match pattern="*.cs" recurse="true">
+					<Exclude name="obj" pattern="obj"/>
+				</Match>
 			</Files>
 		</Project>
 	</Solution>

+ 42 - 42
Prebuild/src/Core/Attributes/DataNodeAttribute.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -28,45 +28,45 @@ using System.Collections.Specialized;
 
 namespace Prebuild.Core.Attributes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple=true)]
-    public sealed class DataNodeAttribute : Attribute
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple=true)]
+	public sealed class DataNodeAttribute : Attribute
+	{
+		#region Fields
 
-        private string m_Name = "unknown";
+		private string m_Name = "unknown";
 
-        #endregion
+		#endregion
 
-        #region Constructors
+		#region Constructors
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="DataNodeAttribute"/> class.
-        /// </summary>
-        /// <param name="name">The name.</param>
-        public DataNodeAttribute(string name)
-        {
-            m_Name = name;
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="DataNodeAttribute"/> class.
+		/// </summary>
+		/// <param name="name">The name.</param>
+		public DataNodeAttribute(string name)
+		{
+			m_Name = name;
+		}
 
-        #endregion
+		#endregion
 
-        #region Properties
+		#region Properties
 
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return m_Name;
-            }
-        }
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return m_Name;
+			}
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 42 - 42
Prebuild/src/Core/Attributes/OptionNodeAttribute.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -27,45 +27,45 @@ using System;
 
 namespace Prebuild.Core.Attributes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [AttributeUsage(AttributeTargets.Field)]
-    public sealed class OptionNodeAttribute : Attribute
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	[AttributeUsage(AttributeTargets.Field)]
+	public sealed class OptionNodeAttribute : Attribute
+	{
+		#region Fields
 
-        private string m_NodeName;
+		private string m_NodeName;
 
-        #endregion
+		#endregion
 
-        #region Constructors
+		#region Constructors
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="OptionNodeAttribute"/> class.
-        /// </summary>
-        /// <param name="nodeName">Name of the node.</param>
-        public OptionNodeAttribute(string nodeName)
-        {
-            m_NodeName = nodeName;
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="OptionNodeAttribute"/> class.
+		/// </summary>
+		/// <param name="nodeName">Name of the node.</param>
+		public OptionNodeAttribute(string nodeName)
+		{
+			m_NodeName = nodeName;
+		}
 
-        #endregion
+		#endregion
 
-        #region Properties
+		#region Properties
 
-        /// <summary>
-        /// Gets the name of the node.
-        /// </summary>
-        /// <value>The name of the node.</value>
-        public string NodeName
-        {
-            get
-            {
-                return m_NodeName;
-            }
-        }
+		/// <summary>
+		/// Gets the name of the node.
+		/// </summary>
+		/// <value>The name of the node.</value>
+		public string NodeName
+		{
+			get
+			{
+				return m_NodeName;
+			}
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 42 - 42
Prebuild/src/Core/Attributes/TargetAttribute.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -27,45 +27,45 @@ using System;
 
 namespace Prebuild.Core.Attributes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
-    public sealed class TargetAttribute : Attribute
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
+	public sealed class TargetAttribute : Attribute
+	{
+		#region Fields
 
-        private string m_Name;
+		private string m_Name;
 
-        #endregion
+		#endregion
 
-        #region Constructors
+		#region Constructors
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="TargetAttribute"/> class.
-        /// </summary>
-        /// <param name="name">The name.</param>
-        public TargetAttribute(string name)
-        {
-            m_Name = name;
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="TargetAttribute"/> class.
+		/// </summary>
+		/// <param name="name">The name.</param>
+		public TargetAttribute(string name)
+		{
+			m_Name = name;
+		}
 
-        #endregion
+		#endregion
 
-        #region Properties
+		#region Properties
 
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return m_Name;
-            }
-        }
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return m_Name;
+			}
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 57 - 57
Prebuild/src/Core/FatalException.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -28,58 +28,58 @@ using System.Runtime.Serialization;
 
 namespace Prebuild.Core
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Serializable()]
-    public class FatalException : Exception
-    {
-        #region Constructors
+	/// <summary>
+	/// 
+	/// </summary>
+	[Serializable()]
+	public class FatalException : Exception
+	{
+		#region Constructors
 
+		
+		/// <summary>
+		/// Initializes a new instance of the <see cref="FatalException"/> class.
+		/// </summary>
+		public FatalException()
+		{
+		}
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="FatalException"/> class.
-        /// </summary>
-        public FatalException()
-        {
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="FatalException"/> class.
+		/// </summary>
+		/// <param name="format">The format.</param>
+		/// <param name="args">The args.</param>
+		public FatalException(string format, params object[] args)
+			: base(String.Format(format, args))
+		{
+		}
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="FatalException"/> class.
-        /// </summary>
-        /// <param name="format">The format.</param>
-        /// <param name="args">The args.</param>
-        public FatalException(string format, params object[] args)
-            : base(String.Format(format, args))
-        {
-        }
+		/// <summary>
+		/// Exception with specified string
+		/// </summary>
+		/// <param name="message">Exception message</param>
+		public FatalException(string message): base(message)
+		{
+		}
 
-        /// <summary>
-        /// Exception with specified string
-        /// </summary>
-        /// <param name="message">Exception message</param>
-        public FatalException(string message): base(message)
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="message"></param>
+		/// <param name="exception"></param>
+		public FatalException(string message, Exception exception) : base(message, exception)
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="exception"></param>
-        public FatalException(string message, Exception exception) : base(message, exception)
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="info"></param>
+		/// <param name="context"></param>
+		protected FatalException(SerializationInfo info, StreamingContext context) : base( info, context )
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="context"></param>
-        protected FatalException(SerializationInfo info, StreamingContext context) : base( info, context )
-        {
-        }
-
-        #endregion
-    }
+		#endregion
+	}
 }

+ 26 - 26
Prebuild/src/Core/Interfaces/IDataNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -26,22 +26,22 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
 using System;
 using System.Xml;
 
-namespace Prebuild.Core.Interfaces
+namespace Prebuild.Core.Interfaces 
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public interface IDataNode
-    {
-        /// <summary>
-        /// Gets or sets the parent.
-        /// </summary>
-        /// <value>The parent.</value>
-        IDataNode Parent { get; set; }
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        void Parse(XmlNode node);
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	public interface IDataNode 
+	{
+		/// <summary>
+		/// Gets or sets the parent.
+		/// </summary>
+		/// <value>The parent.</value>
+		IDataNode Parent { get; set; }        
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		void Parse(XmlNode node);
+	}
 }

+ 31 - 31
Prebuild/src/Core/Interfaces/ITarget.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -25,27 +25,27 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
 
 using System;
 
-namespace Prebuild.Core.Interfaces
+namespace Prebuild.Core.Interfaces 
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public interface ITarget
-    {
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        void Write(Kernel kern);
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        void Clean(Kernel kern);
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        string Name { get; }
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	public interface ITarget 
+	{
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		void Write(Kernel kern);
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		void Clean(Kernel kern);
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		string Name { get; }
+	}
 }

+ 707 - 696
Prebuild/src/Core/Kernel.cs

@@ -49,202 +49,205 @@ using Prebuild.Core.Interfaces;
 using Prebuild.Core.Nodes;
 using Prebuild.Core.Utilities;
 
-namespace Prebuild.Core
+namespace Prebuild.Core 
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public class Kernel : IDisposable
-    {
-        #region Inner Classes
-
-        private struct NodeEntry
-        {
-            public Type Type;
-            public DataNodeAttribute Attribute;
-        }
-
-        #endregion
-
-        #region Fields
-
-        private static readonly Kernel m_Instance = new Kernel();
-
-        /// <summary>
-        /// This must match the version of the schema that is embeeded
-        /// </summary>
-        private const string m_SchemaVersion = "1.10";
-        private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd";
-        private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema;
-        bool disposed;
-        private Version m_Version;
-        private const string m_Revision = "";
-        private CommandLineCollection m_CommandLine;
-        private Log m_Log;
-        private CurrentDirectory m_CurrentWorkingDirectory;
-        private XmlSchemaCollection m_Schemas;
+	/// <summary>
+	/// 
+	/// </summary>
+	public class Kernel : IDisposable
+	{
+		#region Inner Classes
+
+		private struct NodeEntry
+		{
+			public Type Type;
+			public DataNodeAttribute Attribute;
+		}
+
+		#endregion
+
+		#region Fields
+
+		private static readonly Kernel m_Instance = new Kernel();
+
+		/// <summary>
+		/// This must match the version of the schema that is embeeded
+		/// </summary>
+		private const string m_SchemaVersion = "1.10";
+		private const string m_Schema = "prebuild-" + m_SchemaVersion + ".xsd";
+		private const string m_SchemaURI = "http://dnpb.sourceforge.net/schemas/" + m_Schema;
+		bool disposed;
+		private Version m_Version;
+		private const string m_Revision = "w";
+		private CommandLineCollection m_CommandLine;
+		private Log m_Log;
+		private CurrentDirectory m_CurrentWorkingDirectory;
+		private XmlSchemaCollection m_Schemas;
 
         private readonly Dictionary<string, ITarget> m_Targets = new Dictionary<string, ITarget>();
         private readonly Dictionary<string, NodeEntry> m_Nodes = new Dictionary<string, NodeEntry>();
 
-        readonly List<SolutionNode> m_Solutions = new List<SolutionNode>();
+	    readonly List<SolutionNode> m_Solutions = new List<SolutionNode>();
         string m_Target;
-        string m_Clean;
-        string[] m_RemoveDirectories;
-        XmlDocument m_CurrentDoc;
-        bool m_PauseAfterFinish;
-        string[] m_ProjectGroups;
-
-        #endregion
-
-        #region Constructors
-
-        private Kernel()
-        {
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets a value indicating whether [pause after finish].
-        /// </summary>
-        /// <value><c>true</c> if [pause after finish]; otherwise, <c>false</c>.</value>
-        public bool PauseAfterFinish
-        {
-            get
-            {
-                return m_PauseAfterFinish;
-            }
-        }
-
-        /// <summary>
-        /// Gets the instance.
-        /// </summary>
-        /// <value>The instance.</value>
-        public static Kernel Instance
-        {
-            get
-            {
-                return m_Instance;
-            }
-        }
-
-        /// <summary>
-        /// Gets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        public string Version
-        {
-            get
-            {
-                return String.Format("{0}.{1}.{2}{3}", m_Version.Major, m_Version.Minor, m_Version.Build, m_Revision);
-            }
-        }
-
-        /// <summary>
-        /// Gets the command line.
-        /// </summary>
-        /// <value>The command line.</value>
-        public CommandLineCollection CommandLine
-        {
-            get
-            {
-                return m_CommandLine;
-            }
-        }
-
-        /// <summary>
-        /// Gets the targets.
-        /// </summary>
-        /// <value>The targets.</value>
-        public Dictionary<string, ITarget> Targets
-        {
-            get
-            {
-                return m_Targets;
-            }
-        }
-
-        /// <summary>
-        /// Gets the log.
-        /// </summary>
-        /// <value>The log.</value>
-        public Log Log
-        {
-            get
-            {
-                return m_Log;
-            }
-        }
-
-        /// <summary>
-        /// Gets the current working directory.
-        /// </summary>
-        /// <value>The current working directory.</value>
-        public CurrentDirectory CurrentWorkingDirectory
-        {
-            get
-            {
-                return m_CurrentWorkingDirectory;
-            }
-        }
-
-        /// <summary>
-        /// Gets the solutions.
-        /// </summary>
-        /// <value>The solutions.</value>
-        public List<SolutionNode> Solutions
-        {
-            get
-            {
-                return m_Solutions;
-            }
-        }
-
-        /// <summary>
-        /// Gets the XmlDocument object representing the prebuild.xml
-        /// being processed
-        /// </summary>
-        /// <value>The XmlDocument object</value>
-        public XmlDocument CurrentDoc
-        {
-            get
-            {
-                return m_CurrentDoc;
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private static void RemoveDirectories(string rootDir, string[] dirNames)
-        {
-            foreach(string dir in Directory.GetDirectories(rootDir))
-            {
-                string simpleName = Path.GetFileName(dir);
-
-                if(Array.IndexOf(dirNames, simpleName) != -1)
-                {
-                    //delete if the name matches one of the directory names to delete
-                    string fullDirPath = Path.GetFullPath(dir);
-                    Directory.Delete(fullDirPath,true);
-                }
-                else//not a match, so check children
-                {
-                    RemoveDirectories(dir,dirNames);
-                    //recurse, checking children for them
-                }
-            }
-        }
-
-//		private void RemoveDirectoryMatches(string rootDir, string dirPattern)
+        FrameworkVersion m_TargetFramework; //Overrides all project settings
+        string m_Conditionals; //Adds to all project settings
+        public string ForcedConditionals { get { return m_Conditionals; } }
+		string m_Clean;
+		string[] m_RemoveDirectories;
+	    XmlDocument m_CurrentDoc;
+		bool m_PauseAfterFinish;
+		string[] m_ProjectGroups;
+
+	    #endregion
+
+		#region Constructors
+
+		private Kernel()
+		{
+		}
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets a value indicating whether [pause after finish].
+		/// </summary>
+		/// <value><c>true</c> if [pause after finish]; otherwise, <c>false</c>.</value>
+		public bool PauseAfterFinish 
+		{
+			get
+			{ 
+				return m_PauseAfterFinish; 
+			} 
+		}
+
+		/// <summary>
+		/// Gets the instance.
+		/// </summary>
+		/// <value>The instance.</value>
+		public static Kernel Instance
+		{
+			get
+			{
+				return m_Instance;
+			}
+		}
+
+		/// <summary>
+		/// Gets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		public string Version
+		{
+			get
+			{
+				return String.Format("{0}.{1}.{2}{3}", m_Version.Major, m_Version.Minor, m_Version.Build, m_Revision);
+			}
+		}
+
+		/// <summary>
+		/// Gets the command line.
+		/// </summary>
+		/// <value>The command line.</value>
+		public CommandLineCollection CommandLine
+		{
+			get
+			{
+				return m_CommandLine;
+			}
+		}
+
+		/// <summary>
+		/// Gets the targets.
+		/// </summary>
+		/// <value>The targets.</value>
+		public Dictionary<string, ITarget> Targets
+		{
+			get
+			{
+				return m_Targets;
+			}
+		}
+
+		/// <summary>
+		/// Gets the log.
+		/// </summary>
+		/// <value>The log.</value>
+		public Log Log
+		{
+			get
+			{
+				return m_Log;
+			}
+		}
+
+		/// <summary>
+		/// Gets the current working directory.
+		/// </summary>
+		/// <value>The current working directory.</value>
+		public CurrentDirectory CurrentWorkingDirectory
+		{
+			get
+			{
+				return m_CurrentWorkingDirectory;
+			}
+		}
+
+		/// <summary>
+		/// Gets the solutions.
+		/// </summary>
+		/// <value>The solutions.</value>
+		public List<SolutionNode> Solutions
+		{
+			get
+			{
+				return m_Solutions;
+			}
+		}
+		
+		/// <summary>
+		/// Gets the XmlDocument object representing the prebuild.xml
+		/// being processed
+		/// </summary>
+		/// <value>The XmlDocument object</value>
+		public XmlDocument CurrentDoc
+		{
+			get
+			{
+				return m_CurrentDoc;
+			}
+		}
+
+		#endregion
+
+		#region Private Methods
+
+		private static void RemoveDirectories(string rootDir, string[] dirNames) 
+		{
+			foreach(string dir in Directory.GetDirectories(rootDir)) 
+			{
+				string simpleName = Path.GetFileName(dir);
+
+				if(Array.IndexOf(dirNames, simpleName) != -1) 
+				{
+					//delete if the name matches one of the directory names to delete
+					string fullDirPath = Path.GetFullPath(dir);
+					Directory.Delete(fullDirPath,true);
+				} 
+				else//not a match, so check children
+				{
+					RemoveDirectories(dir,dirNames);
+					//recurse, checking children for them
+				}
+			}
+		}
+
+//		private void RemoveDirectoryMatches(string rootDir, string dirPattern) 
 //		{
-//			foreach(string dir in Directory.GetDirectories(rootDir))
+//			foreach(string dir in Directory.GetDirectories(rootDir)) 
 //			{
-//				foreach(string match in Directory.GetDirectories(dir))
+//				foreach(string match in Directory.GetDirectories(dir)) 
 //				{//delete all child directories that match
 //					Directory.Delete(Path.GetFullPath(match),true);
 //				}
@@ -253,56 +256,56 @@ namespace Prebuild.Core
 //			}
 //		}
 
-        private void LoadSchema()
-        {
-            Assembly assembly = GetType().Assembly;
-            Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema);
-            if(stream == null)
-            {
-                //try without the default namespace prepending to it in case was compiled with SharpDevelop or MonoDevelop instead of Visual Studio .NET
-                stream = assembly.GetManifestResourceStream(m_Schema);
-                if(stream == null)
-                {
-                    throw new System.Reflection.TargetException(string.Format("Could not find the scheme embedded resource file '{0}'.", m_Schema));
-                }
-            }
-            XmlReader schema = new XmlTextReader(stream);
-
-            m_Schemas = new XmlSchemaCollection();
-            m_Schemas.Add(m_SchemaURI, schema);
-        }
-
-        private void CacheVersion()
-        {
-            m_Version = Assembly.GetEntryAssembly().GetName().Version;
-        }
-
-        private void CacheTargets(Assembly assm)
-        {
-            foreach(Type t in assm.GetTypes())
-            {
-                TargetAttribute ta = (TargetAttribute)Helper.CheckType(t, typeof(TargetAttribute), typeof(ITarget));
-
-                if(ta == null)
-                    continue;
-
-                if (t.IsAbstract)
-                    continue;
-
-                ITarget target = (ITarget)assm.CreateInstance(t.FullName);
-                if (target == null)
-                {
-                    throw new MissingMethodException("Could not create ITarget instance");
-                }
-
-                m_Targets[ta.Name] = target;
-            }
-        }
-
-        private void CacheNodeTypes(Assembly assm)
-        {
-            foreach(Type t in assm.GetTypes())
-            {
+		private void LoadSchema()
+		{
+			Assembly assembly = GetType().Assembly;
+			Stream stream = assembly.GetManifestResourceStream("Prebuild.data." + m_Schema);
+			if(stream == null) 
+			{
+				//try without the default namespace prepending to it in case was compiled with SharpDevelop or MonoDevelop instead of Visual Studio .NET
+				stream = assembly.GetManifestResourceStream(m_Schema);
+				if(stream == null)
+				{
+					throw new System.Reflection.TargetException(string.Format("Could not find the scheme embedded resource file '{0}'.", m_Schema));
+				}
+			}
+			XmlReader schema = new XmlTextReader(stream);
+            
+			m_Schemas = new XmlSchemaCollection();
+			m_Schemas.Add(m_SchemaURI, schema);
+		}
+
+		private void CacheVersion() 
+		{
+			m_Version = Assembly.GetEntryAssembly().GetName().Version;
+		}
+
+		private void CacheTargets(Assembly assm)
+		{
+			foreach(Type t in assm.GetTypes())
+			{
+				TargetAttribute ta = (TargetAttribute)Helper.CheckType(t, typeof(TargetAttribute), typeof(ITarget));
+
+				if(ta == null)
+					continue;
+				
+				if (t.IsAbstract)
+					continue;
+				
+				ITarget target = (ITarget)assm.CreateInstance(t.FullName);
+				if (target == null)
+				{
+					throw new MissingMethodException("Could not create ITarget instance");
+				}
+
+				m_Targets[ta.Name] = target;
+			}
+		}
+
+		private void CacheNodeTypes(Assembly assm)
+		{
+			foreach(Type t in assm.GetTypes())
+			{
                 foreach (DataNodeAttribute dna in t.GetCustomAttributes(typeof(DataNodeAttribute), true))
                 {
                     NodeEntry ne = new NodeEntry();
@@ -310,11 +313,11 @@ namespace Prebuild.Core
                     ne.Attribute = dna;
                     m_Nodes[dna.Name] = ne;
                 }
-            }
-        }
+			}
+		}
 
-        private void LogBanner()
-        {
+		private void LogBanner()
+		{
             m_Log.Write("Prebuild v" + Version);
             m_Log.Write("Copyright (c) 2004-2010");
             m_Log.Write("Matthew Holmes ([email protected]),");
@@ -323,10 +326,11 @@ namespace Prebuild.Core
             m_Log.Write("Rob Loach (http://www.robloach.net),");
             m_Log.Write("C.J. Adams-Collier ([email protected]),");
             m_Log.Write("John Hurliman ([email protected]),");
-
+            m_Log.Write("WhiteCore build 2015 ([email protected]),");
+            m_Log.Write ("");
             m_Log.Write("See 'prebuild /usage' for help");
             m_Log.Write();
-        }
+		}
 
 
 
@@ -348,37 +352,37 @@ namespace Prebuild.Core
         }
 
         /// <summary>
-        ///
+        /// 
         /// </summary>
         /// <param name="file"></param>
         /// <param name="solutions"></param>
         /// <returns></returns>
-        public void ProcessFile(string file, IList<SolutionNode> solutions)
-        {
-            m_CurrentWorkingDirectory.Push();
-
-            string path = file;
-            try
-            {
-                try
-                {
-                    path = Helper.ResolvePath(path);
-                }
-                catch(ArgumentException)
-                {
-                    m_Log.Write("Could not open Prebuild file: " + path);
-                    m_CurrentWorkingDirectory.Pop();
-                    return;
-                }
-
-                Helper.SetCurrentDir(Path.GetDirectoryName(path));
-
-                XmlTextReader reader = new XmlTextReader(path);
+		public void ProcessFile(string file, IList<SolutionNode> solutions)
+		{
+			m_CurrentWorkingDirectory.Push();
+            
+			string path = file;
+			try
+			{
+				try
+				{
+					path = Helper.ResolvePath(path);
+				}
+				catch(ArgumentException)
+				{
+					m_Log.Write("Could not open Prebuild file: " + path);
+					m_CurrentWorkingDirectory.Pop();
+					return;
+				}
+
+			    Helper.SetCurrentDir(Path.GetDirectoryName(path));
+				
+				XmlTextReader reader = new XmlTextReader(path);
 
                 Core.Parse.Preprocessor pre = new Core.Parse.Preprocessor();
 
                 //register command line arguments as XML variables
-                IEnumerator<KeyValuePair<string, string>> dict = m_CommandLine.GetEnumerator();
+			    IEnumerator<KeyValuePair<string, string>> dict = m_CommandLine.GetEnumerator();
                 while (dict.MoveNext())
                 {
                     string name = dict.Current.Key.Trim();
@@ -386,447 +390,454 @@ namespace Prebuild.Core
                         pre.RegisterVariable(name, dict.Current.Value);
                 }
 
-                string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML
-
-                // See if the user put into a pseudo target of "prebuild:preprocessed-input" to indicate they want to see the
-                // output before the system processes it.
-                if (m_CommandLine.WasPassed("ppi"))
-                {
-                    // Get the filename if there is one, otherwise use a default.
-                    string ppiFile = m_CommandLine["ppi"];
-                    if (ppiFile == null || ppiFile.Trim().Length == 0)
-                    {
-                        ppiFile = "preprocessed-input.xml";
-                    }
-
-                    // Write out the string to the given stream.
-                    try
-                    {
-                        using (StreamWriter ppiWriter = new StreamWriter(ppiFile))
-                        {
-                            ppiWriter.WriteLine(xml);
-                        }
-                    }
-                    catch(IOException ex)
-                    {
-                        Console.WriteLine("Could not write PPI file '{0}': {1}", ppiFile, ex.Message);
-                    }
-
-                    // Finish processing this special tag.
-                    return;
-                }
-
-                m_CurrentDoc = new XmlDocument();
-                try
-                {
+				string xml = pre.Process(reader);//remove script and evaulate pre-proccessing to get schema-conforming XML
+
+				// See if the user put into a pseudo target of "prebuild:preprocessed-input" to indicate they want to see the
+				// output before the system processes it.
+				if (m_CommandLine.WasPassed("ppi"))
+				{
+					// Get the filename if there is one, otherwise use a default.
+					string ppiFile = m_CommandLine["ppi"];
+					if (ppiFile == null || ppiFile.Trim().Length == 0)
+					{
+						ppiFile = "preprocessed-input.xml";
+					}
+
+					// Write out the string to the given stream.
+					try
+					{
+						using (StreamWriter ppiWriter = new StreamWriter(ppiFile))
+						{
+							ppiWriter.WriteLine(xml);
+						}
+					}
+					catch(IOException ex)
+					{
+						Console.WriteLine("Could not write PPI file '{0}': {1}", ppiFile, ex.Message);
+					}
+
+					// Finish processing this special tag.
+					return;
+				}
+				
+				m_CurrentDoc = new XmlDocument();
+				try
+				{
 #if NO_VALIDATE
-                    XmlReader validator = XmlReader.Create(new StringReader(xml));
-                    m_CurrentDoc.Load(validator);
+					XmlReader validator = XmlReader.Create(new StringReader(xml));
+					m_CurrentDoc.Load(validator);
 #else
-                    XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml)));
-
-                    //validate while reading from string into XmlDocument DOM structure in memory
-                    foreach(XmlSchema schema in m_Schemas)
-                    {
-                        validator.Schemas.Add(schema);
-                    }
-                    m_CurrentDoc.Load(validator);
+					XmlValidatingReader validator = new XmlValidatingReader(new XmlTextReader(new StringReader(xml)));
+
+					//validate while reading from string into XmlDocument DOM structure in memory
+					foreach(XmlSchema schema in m_Schemas) 
+					{
+						validator.Schemas.Add(schema);
+					}
+					m_CurrentDoc.Load(validator);
 #endif
-                }
-                catch(XmlException e)
-                {
-                    throw new XmlException(e.ToString());
-                }
-
-                //is there a purpose to writing it?  An syntax/schema problem would have been found during pre.Process() and reported with details
-                if(m_CommandLine.WasPassed("ppo"))
-                {
-                    string ppoFile = m_CommandLine["ppo"];
-                    if(ppoFile == null || ppoFile.Trim().Length < 1)
-                    {
-                        ppoFile = "preprocessed.xml";
-                    }
-
-                    StreamWriter writer = null;
-                    try
-                    {
-                        writer = new StreamWriter(ppoFile);
-                        writer.Write(xml);
-                    }
-                    catch(IOException ex)
-                    {
-                        Console.WriteLine("Could not write PPO file '{0}': {1}", ppoFile, ex.Message);
-                    }
-                    finally
-                    {
-                        if(writer != null)
-                        {
-                            writer.Close();
-                        }
-                    }
-                    return;
-                }
-                //start reading the xml config file
-                XmlElement rootNode = m_CurrentDoc.DocumentElement;
-                //string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0");
-                Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false);
-
-                foreach(XmlNode node in rootNode.ChildNodes)//solutions or if pre-proc instructions
-                {
-                    IDataNode dataNode = ParseNode(node, null);
-                    if(dataNode is ProcessNode)
-                    {
-                        ProcessNode proc = (ProcessNode)dataNode;
-                        if(proc.IsValid)
-                        {
-                            ProcessFile(proc.Path);
-                        }
-                    }
-                    else if(dataNode is SolutionNode)
-                    {
-                        solutions.Add((SolutionNode)dataNode);
-                    }
-                }
-            }
-            catch(XmlSchemaException xse)
-            {
-                m_Log.Write("XML validation error at line {0} in {1}:\n\n{2}",
-                    xse.LineNumber, path, xse.Message);
-            }
-            finally
-            {
-                m_CurrentWorkingDirectory.Pop();
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Allows the project.
-        /// </summary>
-        /// <param name="projectGroupsFlags">The project groups flags.</param>
-        /// <returns></returns>
-        public bool AllowProject(string projectGroupsFlags)
-        {
-            if(m_ProjectGroups != null && m_ProjectGroups.Length > 0)
-            {
-                if(projectGroupsFlags != null && projectGroupsFlags.Length == 0)
+				} 
+				catch(XmlException e) 
+				{
+					throw new XmlException(e.ToString());
+				}
+
+				//is there a purpose to writing it?  An syntax/schema problem would have been found during pre.Process() and reported with details
+				if(m_CommandLine.WasPassed("ppo"))
+				{
+					string ppoFile = m_CommandLine["ppo"];
+					if(ppoFile == null || ppoFile.Trim().Length < 1)
+					{
+						ppoFile = "preprocessed.xml";
+					}
+
+					StreamWriter writer = null;
+					try
+					{
+						writer = new StreamWriter(ppoFile);
+						writer.Write(xml);
+					}
+					catch(IOException ex)
+					{
+						Console.WriteLine("Could not write PPO file '{0}': {1}", ppoFile, ex.Message);
+					}
+					finally
+					{
+						if(writer != null)
+						{
+							writer.Close();
+						}
+					}
+					return;
+				}
+				//start reading the xml config file
+				XmlElement rootNode = m_CurrentDoc.DocumentElement;
+				//string suggestedVersion = Helper.AttributeValue(rootNode,"version","1.0");
+				Helper.CheckForOSVariables = Helper.ParseBoolean(rootNode,"checkOsVars",false);
+
+				foreach(XmlNode node in rootNode.ChildNodes)//solutions or if pre-proc instructions
+				{
+					IDataNode dataNode = ParseNode(node, null);
+					if(dataNode is ProcessNode)
+					{
+						ProcessNode proc = (ProcessNode)dataNode;
+						if(proc.IsValid)
+						{
+							ProcessFile(proc.Path);
+						}
+					}
+					else if(dataNode is SolutionNode)
+					{
+						solutions.Add((SolutionNode)dataNode);
+					}
+				}
+			}
+			catch(XmlSchemaException xse)
+			{
+				m_Log.Write("XML validation error at line {0} in {1}:\n\n{2}",
+					xse.LineNumber, path, xse.Message);
+			}
+			finally
+			{
+				m_CurrentWorkingDirectory.Pop();
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Allows the project.
+		/// </summary>
+		/// <param name="projectGroupsFlags">The project groups flags.</param>
+		/// <returns></returns>
+		public bool AllowProject(string projectGroupsFlags) 
+		{
+			if(m_ProjectGroups != null && m_ProjectGroups.Length > 0) 
+			{
+				if(projectGroupsFlags != null && projectGroupsFlags.Length == 0) 
+				{
+					foreach(string group in projectGroupsFlags.Split('|')) 
+					{
+						if(Array.IndexOf(m_ProjectGroups, group) != -1) //if included in the filter list
+						{
+							return true;
+						}
+					}
+				}
+				return false;//not included in the list or no groups specified for the project
+			}
+			return true;//no filter specified in the command line args
+		}
+
+		/// <summary>
+		/// Gets the type of the node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		/// <returns></returns>
+		public Type GetNodeType(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+			if(!m_Nodes.ContainsKey(node.Name))
+			{
+				return null;
+			}
+
+			NodeEntry ne = m_Nodes[node.Name];
+			return ne.Type;
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="node"></param>
+		/// <param name="parent"></param>
+		/// <returns></returns>
+		public IDataNode ParseNode(XmlNode node, IDataNode parent)
+		{
+			return ParseNode(node, parent, null);
+		}
+
+		//Create an instance of the data node type that is mapped to the name of the xml DOM node
+		/// <summary>
+		/// Parses the node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		/// <param name="parent">The parent.</param>
+		/// <param name="preNode">The pre node.</param>
+		/// <returns></returns>
+		public IDataNode ParseNode(XmlNode node, IDataNode parent, IDataNode preNode)
+		{
+			IDataNode dataNode;
+
+			try
+			{
+				if( node == null )
+				{
+					throw new ArgumentNullException("node");
+				}
+				if(preNode == null)
+				{
+					if(!m_Nodes.ContainsKey(node.Name))
+					{
+						Console.WriteLine("WARNING: Unknown XML node: " + node.Name);
+						return null;
+					}
+
+					NodeEntry ne = m_Nodes[node.Name];
+					Type type = ne.Type;
+					//DataNodeAttribute dna = ne.Attribute;
+
+					dataNode = (IDataNode)type.Assembly.CreateInstance(type.FullName);
+					if(dataNode == null)
+					{
+						throw new System.Reflection.TargetException("Could not create new parser instance: " + type.FullName);
+					}
+				}
+				else
+					dataNode = preNode;
+
+				dataNode.Parent = parent;
+                if (dataNode is ProjectNode)
                 {
-                    foreach(string group in projectGroupsFlags.Split('|'))
-                    {
-                        if(Array.IndexOf(m_ProjectGroups, group) != -1) //if included in the filter list
-                        {
-                            return true;
-                        }
-                    }
+                    ((ProjectNode)dataNode).FrameworkVersion = m_TargetFramework;
                 }
-                return false;//not included in the list or no groups specified for the project
-            }
-            return true;//no filter specified in the command line args
-        }
-
-        /// <summary>
-        /// Gets the type of the node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        /// <returns></returns>
-        public Type GetNodeType(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-            if(!m_Nodes.ContainsKey(node.Name))
-            {
-                return null;
-            }
-
-            NodeEntry ne = m_Nodes[node.Name];
-            return ne.Type;
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="node"></param>
-        /// <param name="parent"></param>
-        /// <returns></returns>
-        public IDataNode ParseNode(XmlNode node, IDataNode parent)
-        {
-            return ParseNode(node, parent, null);
-        }
-
-        //Create an instance of the data node type that is mapped to the name of the xml DOM node
-        /// <summary>
-        /// Parses the node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        /// <param name="parent">The parent.</param>
-        /// <param name="preNode">The pre node.</param>
-        /// <returns></returns>
-        public IDataNode ParseNode(XmlNode node, IDataNode parent, IDataNode preNode)
-        {
-            IDataNode dataNode;
-
-            try
-            {
-                if( node == null )
-                {
-                    throw new ArgumentNullException("node");
-                }
-                if(preNode == null)
-                {
-                    if(!m_Nodes.ContainsKey(node.Name))
-                    {
-                        Console.WriteLine("WARNING: Unknown XML node: " + node.Name);
-                        return null;
-                    }
-
-                    NodeEntry ne = m_Nodes[node.Name];
-                    Type type = ne.Type;
-                    //DataNodeAttribute dna = ne.Attribute;
-
-                    dataNode = (IDataNode)type.Assembly.CreateInstance(type.FullName);
-                    if(dataNode == null)
-                    {
-                        throw new System.Reflection.TargetException("Could not create new parser instance: " + type.FullName);
-                    }
-                }
-                else
-                    dataNode = preNode;
-
-                dataNode.Parent = parent;
-                dataNode.Parse(node);
-            }
-            catch(WarningException wex)
-            {
-                m_Log.Write(LogType.Warning, wex.Message);
-                return null;
-            }
-            catch(FatalException fex)
-            {
-                m_Log.WriteException(LogType.Error, fex);
-                throw;
-            }
-            catch(Exception ex)
-            {
-                m_Log.WriteException(LogType.Error, ex);
-                throw;
-            }
-
-            return dataNode;
-        }
-
-        /// <summary>
-        /// Initializes the specified target.
-        /// </summary>
-        /// <param name="target">The target.</param>
-        /// <param name="args">The args.</param>
-        public void Initialize(LogTargets target, string[] args)
-        {
-            CacheTargets(GetType().Assembly);
-            CacheNodeTypes(GetType().Assembly);
-            CacheVersion();
-
-            m_CommandLine = new CommandLineCollection(args);
-
-            string logFile = null;
-            if(m_CommandLine.WasPassed("log"))
-            {
-                logFile = m_CommandLine["log"];
-
-                if(logFile != null && logFile.Length == 0)
-                {
-                    logFile = "Prebuild.log";
-                }
-            }
-            else
-            {
-                target = target & ~LogTargets.File;	//dont output to a file
-            }
-
-            m_Log = new Log(target, logFile);
-            LogBanner();
-
-            m_CurrentWorkingDirectory = new CurrentDirectory();
+				dataNode.Parse(node);
+			}
+			catch(WarningException wex)
+			{
+				m_Log.Write(LogType.Warning, wex.Message);
+				return null;
+			}
+			catch(FatalException fex)
+			{
+				m_Log.WriteException(LogType.Error, fex);
+				throw;
+			}
+			catch(Exception ex)
+			{
+				m_Log.WriteException(LogType.Error, ex);
+				throw;
+			}
+
+			return dataNode;
+		}
+
+		/// <summary>
+		/// Initializes the specified target.
+		/// </summary>
+		/// <param name="target">The target.</param>
+		/// <param name="args">The args.</param>
+		public void Initialize(LogTargets target, string[] args)
+		{
+			CacheTargets(GetType().Assembly);
+			CacheNodeTypes(GetType().Assembly);
+			CacheVersion();
+
+			m_CommandLine = new CommandLineCollection(args);
+            
+			string logFile = null;
+			if(m_CommandLine.WasPassed("log")) 
+			{
+				logFile = m_CommandLine["log"];
+
+				if(logFile != null && logFile.Length == 0)
+				{
+					logFile = "Prebuild.log";
+				}
+			}
+			else 
+			{
+				target = target & ~LogTargets.File;	//dont output to a file
+			}
+            
+			m_Log = new Log(target, logFile);
+			LogBanner();
+
+			m_CurrentWorkingDirectory = new CurrentDirectory();
 
             m_Target = m_CommandLine["target"];
-            m_Clean = m_CommandLine["clean"];
-            string removeDirs = m_CommandLine["removedir"];
-            if(removeDirs != null && removeDirs.Length == 0)
-            {
-                m_RemoveDirectories = removeDirs.Split('|');
-            }
-
-            string flags = m_CommandLine["allowedgroups"];//allows filtering by specifying a pipe-delimited list of groups to include
-            if(flags != null && flags.Length == 0)
-            {
-                m_ProjectGroups = flags.Split('|');
-            }
-            m_PauseAfterFinish = m_CommandLine.WasPassed("pause");
-
-            LoadSchema();
-        }
-
-        /// <summary>
-        /// Processes this instance.
-        /// </summary>
-        public void Process()
-        {
-            bool perfomedOtherTask = false;
-            if(m_RemoveDirectories != null && m_RemoveDirectories.Length > 0)
-            {
-                try
-                {
-                    RemoveDirectories(".",m_RemoveDirectories);
-                }
-                catch(IOException e)
-                {
-                    m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
-                    m_Log.WriteException(LogType.Error,e);
-                }
-                catch(UnauthorizedAccessException e)
-                {
-                    m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
-                    m_Log.WriteException(LogType.Error,e);
-                }
-                perfomedOtherTask = true;
-            }
-
-            if(m_Target != null && m_Clean != null)
-            {
-                m_Log.Write(LogType.Error, "The options /target and /clean cannot be passed together");
-                return;
-            }
-
+            m_Conditionals = m_CommandLine["conditionals"];
+            if(m_CommandLine["targetframework"] != null)
+                m_TargetFramework = (FrameworkVersion)Enum.Parse (typeof (FrameworkVersion), m_CommandLine["targetframework"]);
+			m_Clean = m_CommandLine["clean"];
+			string removeDirs = m_CommandLine["removedir"];
+			if(removeDirs != null && removeDirs.Length == 0) 
+			{
+				m_RemoveDirectories = removeDirs.Split('|');
+			}
+
+			string flags = m_CommandLine["allowedgroups"];//allows filtering by specifying a pipe-delimited list of groups to include
+			if(flags != null && flags.Length == 0)
+			{
+				m_ProjectGroups = flags.Split('|');
+			}
+			m_PauseAfterFinish = m_CommandLine.WasPassed("pause");
+
+			LoadSchema();
+		}
+
+		/// <summary>
+		/// Processes this instance.
+		/// </summary>
+		public void Process()
+		{
+			bool perfomedOtherTask = false;
+			if(m_RemoveDirectories != null && m_RemoveDirectories.Length > 0) 
+			{
+				try
+				{
+					RemoveDirectories(".",m_RemoveDirectories);
+				} 
+				catch(IOException e) 
+				{
+					m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
+					m_Log.WriteException(LogType.Error,e);
+				}
+				catch(UnauthorizedAccessException e) 
+				{
+					m_Log.Write("Failed to remove directories named {0}",m_RemoveDirectories);
+					m_Log.WriteException(LogType.Error,e);
+				}
+				perfomedOtherTask = true;
+			}
+
+			if(m_Target != null && m_Clean != null)
+			{
+				m_Log.Write(LogType.Error, "The options /target and /clean cannot be passed together");
+				return;
+			}
+		    
             if(m_Target == null && m_Clean == null)
-            {
-                if(perfomedOtherTask) //finished
-                {
-                    return;
-                }
-                m_Log.Write(LogType.Error, "Must pass either /target or /clean to process a Prebuild file");
-                return;
-            }
-
-            string file = "./prebuild.xml";
-            if(m_CommandLine.WasPassed("file"))
-            {
-                file = m_CommandLine["file"];
-            }
-
-            ProcessFile(file);
-
-            string target = (m_Target != null ? m_Target.ToLower() : m_Clean.ToLower());
-            bool clean = (m_Target == null);
-            if(clean && target != null && target.Length == 0)
-            {
-                target = "all";
-            }
-            if(clean && target == "all")//default to all if no target was specified for clean
-            {
+		    {
+		        if(perfomedOtherTask) //finished
+		        {
+		            return;
+		        }
+		        m_Log.Write(LogType.Error, "Must pass either /target or /clean to process a Prebuild file");
+		        return;
+		    }
+
+		    string file = "./prebuild.xml";
+			if(m_CommandLine.WasPassed("file"))
+			{
+				file = m_CommandLine["file"];
+			}
+
+			ProcessFile(file);
+
+			string target = (m_Target != null ? m_Target.ToLower() : m_Clean.ToLower());
+			bool clean = (m_Target == null);
+			if(clean && target != null && target.Length == 0)
+			{
+				target = "all";
+			}
+			if(clean && target == "all")//default to all if no target was specified for clean
+			{
                 //check if they passed yes
                 if (!m_CommandLine.WasPassed("yes"))
                 {
-                    Console.WriteLine("WARNING: This operation will clean ALL project files for all targets, are you sure? (y/n):");
-                    string ret = Console.ReadLine();
-                    if(ret == null)
-                    {
-                        return;
+				    Console.WriteLine("WARNING: This operation will clean ALL project files for all targets, are you sure? (y/n):");
+				    string ret = Console.ReadLine();
+				    if(ret == null)
+				    {
+					    return;
+				    }
+				    ret = ret.Trim().ToLower();
+				    if((ret.ToLower() != "y" && ret.ToLower() != "yes"))
+				    {
+					    return;
                     }
-                    ret = ret.Trim().ToLower();
-                    if((ret.ToLower() != "y" && ret.ToLower() != "yes"))
-                    {
-                        return;
-                    }
-                }
-                //clean all targets (just cleaning vs2002 target didn't clean nant)
-                foreach(ITarget targ in m_Targets.Values)
-                {
-                    targ.Clean(this);
                 }
-            }
-            else
-            {
-                if (!m_Targets.ContainsKey(target)) {
-                    m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target);
-                    return;
-                }
-                ITarget targ = m_Targets[target];
-
-                if(clean)
-                {
-                    targ.Clean(this);
-                }
-                else
-                {
-                    targ.Write(this);
-                }
-            }
-
-            m_Log.Flush();
-        }
-
-        #endregion
-
-        #region IDisposable Members
-
-        /// <summary>
-        ///
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Dispose objects
-        /// </summary>
-        /// <param name="disposing">
-        /// If true, it will dispose close the handle
-        /// </param>
-        /// <remarks>
-        /// Will dispose managed and unmanaged resources.
-        /// </remarks>
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!disposed)
-            {
-                if (disposing)
-                {
+				//clean all targets (just cleaning vs2002 target didn't clean nant)
+				foreach(ITarget targ in m_Targets.Values)
+				{
+					targ.Clean(this);
+				}
+			}
+			else
+			{
+				if (!m_Targets.ContainsKey(target)) {
+					m_Log.Write(LogType.Error, "Unknown Target \"{0}\"", target);
+					return;
+				}
+				ITarget targ = m_Targets[target];
+
+				if(clean)
+				{
+					targ.Clean(this);
+				}
+				else
+				{
+					targ.Write(this);
+				}
+			}
+
+			m_Log.Flush();
+		}
+
+		#endregion        
+
+		#region IDisposable Members
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public void Dispose()
+		{
+			Dispose(true);
+			GC.SuppressFinalize(this);
+		}
+
+		/// <summary>
+		/// Dispose objects
+		/// </summary>
+		/// <param name="disposing">
+		/// If true, it will dispose close the handle
+		/// </param>
+		/// <remarks>
+		/// Will dispose managed and unmanaged resources.
+		/// </remarks>
+		protected virtual void Dispose(bool disposing)
+		{
+			if (!disposed)
+			{
+				if (disposing)
+				{
                     GC.SuppressFinalize(this);
-                    if (m_Log != null)
-                    {
-                        m_Log.Close();
-                        m_Log = null;
-                    }
-                }
-            }
-            disposed = true;
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        ~Kernel()
-        {
-            Dispose(false);
-        }
-
-        /// <summary>
-        /// Closes and destroys this object
-        /// </summary>
-        /// <remarks>
-        /// Same as Dispose(true)
-        /// </remarks>
-        public void Close()
-        {
-            Dispose();
-        }
-
-        #endregion
-    }
+					if (m_Log != null)
+					{
+						m_Log.Close();
+						m_Log = null;
+					}
+				}
+			}
+			disposed = true;
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		~Kernel()
+		{
+			Dispose(false);
+		}
+		
+		/// <summary>
+		/// Closes and destroys this object
+		/// </summary>
+		/// <remarks>
+		/// Same as Dispose(true)
+		/// </remarks>
+		public void Close() 
+		{
+			Dispose();
+		}
+
+		#endregion
+	}
 }

+ 62 - 62
Prebuild/src/Core/Nodes/AuthorNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2007 C.J. Adams-Collier ([email protected])
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,56 +32,56 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Author")]
-    public class AuthorNode : DataNode
-    {
-        #region Fields
-
-        private string m_Signature;
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the signature.
-        /// </summary>
-        /// <value>The signature.</value>
-        public string Signature
-        {
-            get
-            {
-                return m_Signature;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            m_Signature = Helper.InterpolateForEnvironmentVariables(node.InnerText);
-            if(m_Signature == null)
-            {
-                m_Signature = "";
-            }
-
-            m_Signature = m_Signature.Trim();
-        }
-
-        #endregion
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Author")]
+	public class AuthorNode : DataNode
+	{
+		#region Fields
+
+		private string m_Signature;
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the signature.
+		/// </summary>
+		/// <value>The signature.</value>
+		public string Signature
+		{
+			get
+			{
+				return m_Signature;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+
+			m_Signature = Helper.InterpolateForEnvironmentVariables(node.InnerText);
+			if(m_Signature == null)
+			{
+				m_Signature = "";
+			}
+
+			m_Signature = m_Signature.Trim();
+		}
+
+		#endregion
+	}
 }

+ 9 - 9
Prebuild/src/Core/Nodes/CleanFilesNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2007 C.J. Adams-Collier ([email protected])
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

+ 37 - 37
Prebuild/src/Core/Nodes/CleanupNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2007 C.J. Adams-Collier ([email protected])
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -35,40 +35,40 @@ namespace Prebuild.Core.Nodes
     [DataNode("Cleanup")]
     public class CleanupNode : DataNode
     {
-        #region Fields
+		#region Fields
 
-        private List<CleanFilesNode> m_CleanFiles = new List<CleanFilesNode>();
+		private List<CleanFilesNode> m_CleanFiles = new List<CleanFilesNode>();
 
-        #endregion
+		#endregion
 
-        #region Properties
+		#region Properties
 
-        /// <summary>
-        /// Gets the signature.
-        /// </summary>
-        /// <value>The signature.</value>
+		/// <summary>
+		/// Gets the signature.
+		/// </summary>
+		/// <value>The signature.</value>
         public List<CleanFilesNode> CleanFiles
-        {
-            get
-            {
-                return m_CleanFiles;
-            }
-        }
+		{
+			get
+			{
+				return m_CleanFiles;
+			}
+		}
 
-        #endregion
+		#endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
 
             foreach (XmlNode child in node.ChildNodes)
             {
@@ -78,8 +78,8 @@ namespace Prebuild.Core.Nodes
                     m_CleanFiles.Add((CleanFilesNode)dataNode);
                 }
             }
-        }
+		}
 
-        #endregion
+		#endregion
     }
 }

+ 186 - 186
Prebuild/src/Core/Nodes/ConfigurationNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,185 +32,185 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Configuration")]
-    public class ConfigurationNode : DataNode, ICloneable, IComparable
-    {
-        #region Fields
-
-        private string m_Name = "unknown";
-        private string m_Platform = "AnyCPU";
-        private OptionsNode m_Options;
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ConfigurationNode"/> class.
-        /// </summary>
-        public ConfigurationNode()
-        {
-            m_Options = new OptionsNode();
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets or sets the parent.
-        /// </summary>
-        /// <value>The parent.</value>
-        public override IDataNode Parent
-        {
-            get
-            {
-                return base.Parent;
-            }
-            set
-            {
-                base.Parent = value;
-                if(base.Parent is SolutionNode)
-                {
-                    SolutionNode node = (SolutionNode)base.Parent;
-                    if(node != null && node.Options != null)
-                    {
-                        node.Options.CopyTo(m_Options);
-                    }
-                }
-            }
-        }
-
-        /// <summary>
-        /// Identifies the platform for this specific configuration.
-        /// </summary>
-        public string Platform
-        {
-            get
-            {
-                return m_Platform;
-            }
-            set
-            {
-                switch ((value + "").ToLower())
-                {
-                case "x86":
-                case "x64":
-                    m_Platform = value;
-                    break;
-                case "itanium":
-                    m_Platform = "Itanium";
-                    break;
-                default:
-                    m_Platform = "AnyCPU";
-                    break;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return m_Name;
-            }
-        }
-
-        /// <summary>
-        /// Gets the name and platform for the configuration.
-        /// </summary>
-        /// <value>The name and platform.</value>
-        public string NameAndPlatform
-        {
-            get
-            {
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Configuration")]
+	public class ConfigurationNode : DataNode, ICloneable, IComparable
+	{
+		#region Fields
+
+		private string m_Name = "unknown";
+		private string m_Platform = "AnyCPU";
+		private OptionsNode m_Options;
+
+		#endregion
+
+		#region Constructors
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="ConfigurationNode"/> class.
+		/// </summary>
+		public ConfigurationNode()
+		{
+			m_Options = new OptionsNode();
+		}
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets or sets the parent.
+		/// </summary>
+		/// <value>The parent.</value>
+		public override IDataNode Parent
+		{
+			get
+			{
+				return base.Parent;
+			}
+			set
+			{
+				base.Parent = value;
+				if(base.Parent is SolutionNode)
+				{
+					SolutionNode node = (SolutionNode)base.Parent;
+					if(node != null && node.Options != null)
+					{
+						node.Options.CopyTo(m_Options);
+					}
+				}
+			}
+		}
+
+		/// <summary>
+		/// Identifies the platform for this specific configuration.
+		/// </summary>
+		public string Platform
+		{
+			get
+			{
+				return m_Platform;
+			}
+			set
+			{
+				switch ((value + "").ToLower())
+				{
+				case "x86":
+				case "x64":
+					m_Platform = value;
+					break;
+				case "itanium":
+					m_Platform = "Itanium";
+					break;
+				default:
+					m_Platform = "AnyCPU";
+					break;
+				}
+			}
+		}
+
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return m_Name;
+			}
+		}
+
+		/// <summary>
+		/// Gets the name and platform for the configuration.
+		/// </summary>
+		/// <value>The name and platform.</value>
+		public string NameAndPlatform
+		{
+			get
+			{
                 string platform = m_Platform;
                 if (platform == "AnyCPU")
                     platform = "Any CPU";
 
-                return String.Format("{0}|{1}", m_Name, platform);
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the options.
-        /// </summary>
-        /// <value>The options.</value>
-        public OptionsNode Options
-        {
-            get
-            {
-                return m_Options;
-            }
-            set
-            {
-                m_Options = value;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            m_Name = Helper.AttributeValue(node, "name", m_Name);
-            Platform = Helper.AttributeValue(node, "platform", m_Platform);
-
-            if (node == null)
-            {
-                throw new ArgumentNullException("node");
-            }
-            foreach(XmlNode child in node.ChildNodes)
-            {
-                IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
-                if(dataNode is OptionsNode)
-                {
-                    ((OptionsNode)dataNode).CopyTo(m_Options);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Copies to.
-        /// </summary>
-        /// <param name="conf">The conf.</param>
-        public void CopyTo(ConfigurationNode conf)
-        {
-            m_Options.CopyTo(conf.m_Options);
-        }
-
-        #endregion
-
-        #region ICloneable Members
-
-        /// <summary>
-        /// Creates a new object that is a copy of the current instance.
-        /// </summary>
-        /// <returns>
-        /// A new object that is a copy of this instance.
-        /// </returns>
-        public object Clone()
-        {
-            ConfigurationNode ret = new ConfigurationNode();
-            ret.m_Name = m_Name;
-            ret.m_Platform = m_Platform;
-            m_Options.CopyTo(ret.m_Options);
-            return ret;
-        }
-
-        #endregion
+				return String.Format("{0}|{1}", m_Name, platform);
+			}
+		}
+
+		/// <summary>
+		/// Gets or sets the options.
+		/// </summary>
+		/// <value>The options.</value>
+		public OptionsNode Options
+		{
+			get
+			{
+				return m_Options;
+			}
+			set
+			{
+				m_Options = value;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			m_Name = Helper.AttributeValue(node, "name", m_Name);
+			Platform = Helper.AttributeValue(node, "platform", m_Platform);
+
+			if (node == null)
+			{
+				throw new ArgumentNullException("node");
+			}
+			foreach(XmlNode child in node.ChildNodes)
+			{
+				IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
+				if(dataNode is OptionsNode)
+				{
+					((OptionsNode)dataNode).CopyTo(m_Options);
+				}
+			}
+		}
+
+		/// <summary>
+		/// Copies to.
+		/// </summary>
+		/// <param name="conf">The conf.</param>
+		public void CopyTo(ConfigurationNode conf)
+		{
+			m_Options.CopyTo(conf.m_Options);
+		}
+
+		#endregion
+
+		#region ICloneable Members
+
+		/// <summary>
+		/// Creates a new object that is a copy of the current instance.
+		/// </summary>
+		/// <returns>
+		/// A new object that is a copy of this instance.
+		/// </returns>
+		public object Clone()
+		{
+			ConfigurationNode ret = new ConfigurationNode();
+			ret.m_Name = m_Name;
+			ret.m_Platform = m_Platform;
+			m_Options.CopyTo(ret.m_Options);
+			return ret;
+		}
+
+		#endregion
 
         #region IComparable Members
 
@@ -221,5 +221,5 @@ namespace Prebuild.Core.Nodes
         }
 
         #endregion
-    }
+	}
 }

+ 45 - 45
Prebuild/src/Core/Nodes/ConfigurationNodeCollection.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -27,45 +27,45 @@ using System.Collections.Generic;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    /// Implements a specialized list of configuration nodes which allows for lookup via
-    /// configuration name and platform.
-    /// </summary>
-    public class ConfigurationNodeCollection : List<ConfigurationNode>
-    {
-        #region Properties
+	/// <summary>
+	/// Implements a specialized list of configuration nodes which allows for lookup via
+	/// configuration name and platform.
+	/// </summary>
+	public class ConfigurationNodeCollection : List<ConfigurationNode>
+	{
+		#region Properties
 
-        public ConfigurationNode this[string nameAndPlatform]
-        {
-            get
-            {
-                foreach (ConfigurationNode configurationNode in this)
-                {
-                    if (configurationNode.NameAndPlatform == nameAndPlatform)
-                    {
-                        return configurationNode;
-                    }
-                }
+		public ConfigurationNode this[string nameAndPlatform]
+		{
+			get
+			{
+				foreach (ConfigurationNode configurationNode in this)
+				{
+					if (configurationNode.NameAndPlatform == nameAndPlatform)
+					{
+						return configurationNode;
+					}
+				}
 
-                return null;
-            }
+				return null;
+			}
 
-            set
-            {
-                // See if the node
-                ConfigurationNode configurationNode = this[nameAndPlatform];
+			set
+			{
+				// See if the node 
+				ConfigurationNode configurationNode = this[nameAndPlatform];
 
-                if (configurationNode != null)
-                {
-                    this[IndexOf(configurationNode)] = value;
-                }
-                else
-                {
-                    Add(value);
-                }
-            }
-        }
+				if (configurationNode != null)
+				{
+					this[IndexOf(configurationNode)] = value;
+				}
+				else
+				{
+					Add(value);
+				}
+			}
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 86 - 86
Prebuild/src/Core/Nodes/DataNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,86 +32,86 @@ using System.IO;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public abstract class DataNode : IDataNode
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	public abstract class DataNode : IDataNode
+	{
+		#region Fields
 
-        private IDataNode parent;
-        string[] m_WebTypes = new string[] { "aspx", "ascx", "master", "ashx", "asmx" };
+		private IDataNode parent;
+		string[] m_WebTypes = new string[] { "aspx", "ascx", "master", "ashx", "asmx" };
 
-        #endregion
+		#endregion
 
-        #region IDataNode Members
+		#region IDataNode Members
 
-        /// <summary>
-        /// Gets or sets the parent.
-        /// </summary>
-        /// <value>The parent.</value>
-        public virtual IDataNode Parent
-        {
-            get
-            {
-                return parent;
-            }
-            set
-            {
-                parent = value;
-            }
-        }
-        public string[] WebTypes
-        {
-            get { return m_WebTypes; }
-        }
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public virtual void Parse(XmlNode node)
-        {
-        }
-        public BuildAction GetBuildActionByFileName(string fileName)
-        {
-            string extension = Path.GetExtension(fileName).ToLower();
-            foreach (string type in WebTypes)
-            {
-                if (extension == type)
-                    return BuildAction.Content;
-            }
-            return BuildAction.Compile;
-        }
-        /// <summary>
-        /// Parses the file type to figure out what type it is
-        /// </summary>
-        /// <returns></returns>
-        public SubType GetSubTypeByFileName(string fileName)
-        {
-            string extension = System.IO.Path.GetExtension(fileName).ToLower();
-            string designer = String.Format(".designer{0}", extension);
-            string path = fileName.ToLower();
-            if (extension == ".resx")
-            {
-                return SubType.Designer;
-            }
-            else if (path.EndsWith(".settings"))
-            {
-                return SubType.Settings;
-            }
-            else
-            {
-
-                foreach (string type in WebTypes)
-                {
+		/// <summary>
+		/// Gets or sets the parent.
+		/// </summary>
+		/// <value>The parent.</value>
+		public virtual IDataNode Parent
+		{
+			get
+			{
+				return parent;
+			}
+			set
+			{
+				parent = value;
+			}
+		}
+		public string[] WebTypes
+		{
+			get { return m_WebTypes; }
+		}
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public virtual void Parse(XmlNode node)
+		{
+		}
+		public BuildAction GetBuildActionByFileName(string fileName)
+		{
+			string extension = Path.GetExtension(fileName).ToLower();
+			foreach (string type in WebTypes)
+			{
+				if (extension == type)
+					return BuildAction.Content;
+			}
+			return BuildAction.Compile;
+		}
+		/// <summary>
+		/// Parses the file type to figure out what type it is
+		/// </summary>
+		/// <returns></returns>
+		public SubType GetSubTypeByFileName(string fileName)
+		{
+			string extension = System.IO.Path.GetExtension(fileName).ToLower();
+			string designer = String.Format(".designer{0}", extension);
+			string path = fileName.ToLower();
+			if (extension == ".resx")
+			{
+				return SubType.Designer;
+			}
+			else if (path.EndsWith(".settings"))
+			{
+				return SubType.Settings;
+			}
+			else
+			{
+				
+				foreach (string type in WebTypes)
+				{
                     if (path.EndsWith(type))
-                    {
-                        return SubType.CodeBehind;
-                    }
-                }
-            }
-            return SubType.Code;
-        }
-        #endregion
-    }
+					{
+						return SubType.CodeBehind;
+					}
+				}
+			}
+			return SubType.Code;
+		}
+		#endregion
+	}
 }

+ 3 - 3
Prebuild/src/Core/Nodes/DatabaseReferenceNode.cs

@@ -43,18 +43,18 @@ namespace Prebuild.Core.Nodes
                         providerId = new Guid("7F041D59-D76A-44ed-9AA2-FBF6B0548B80"); break;
                     case "System.Data.OracleClient":
                         providerId = new Guid("8F5C5018-AE09-42cf-B2CC-2CCCC7CFC2BB"); break;
-                    case "System.Data.SqlClient":
+                    case "System.Data.SqlClient": 
                         providerId = new Guid("91510608-8809-4020-8897-FBA057E22D54"); break;
                     case "System.Data.Odbc":
                         providerId = new Guid("C3D4F4CE-2C48-4381-B4D6-34FA50C51C86"); break;
-
+                    
                     default:
                         throw new ArgumentOutOfRangeException("providerName", providerName, "Could not provider name to an id.");
                 }
             }
             else
                 providerId = new Guid(Helper.AttributeValue(node, "providerId", Guid.Empty.ToString("B")));
-
+            
             connectionString = Helper.AttributeValue(node, "connectionString", connectionString);
 
             base.Parse(node);

+ 62 - 62
Prebuild/src/Core/Nodes/DescriptionNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2007 C.J. Adams-Collier ([email protected])
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,56 +32,56 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    /// The object representing the /Prebuild/Solution/Project/Description element
-    /// </summary>
-    [DataNode("Description")]
-    public class DescriptionNode : DataNode
-    {
-        #region Fields
-
-        private string m_Value;
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the description Value.
-        /// </summary>
-        /// <value>The description Value.</value>
-        public string Value
-        {
-            get
-            {
-                return m_Value;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            m_Value = Helper.InterpolateForEnvironmentVariables(node.InnerText);
-            if(m_Value == null)
-            {
-                m_Value = "";
-            }
-
-            m_Value = m_Value.Trim();
-        }
-
-        #endregion
-    }
+	/// <summary>
+	/// The object representing the /Prebuild/Solution/Project/Description element
+	/// </summary>
+	[DataNode("Description")]
+	public class DescriptionNode : DataNode
+	{
+		#region Fields
+
+		private string m_Value;
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the description Value.
+		/// </summary>
+		/// <value>The description Value.</value>
+		public string Value
+		{
+			get
+			{
+				return m_Value;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+
+			m_Value = Helper.InterpolateForEnvironmentVariables(node.InnerText);
+			if(m_Value == null)
+			{
+				m_Value = "";
+			}
+
+			m_Value = m_Value.Trim();
+		}
+
+		#endregion
+	}
 }

+ 39 - 39
Prebuild/src/Core/Nodes/ExcludeNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,31 +32,31 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Exclude")]
-    public class ExcludeNode : DataNode
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Exclude")]
+	public class ExcludeNode : DataNode
+	{
+		#region Fields
 
         private string m_Pattern = "";
 
-        #endregion
+		#endregion
 
-        #region Properties
+		#region Properties
 
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return m_Pattern;
-            }
-        }
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return m_Pattern;
+			}
+		}
 
         /// <summary>
         /// Gets the pattern.
@@ -72,18 +72,18 @@ namespace Prebuild.Core.Nodes
 
         #endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
             m_Pattern = Helper.AttributeValue( node, "name", m_Pattern );
             m_Pattern = Helper.AttributeValue(node, "pattern", m_Pattern );
-        }
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 228 - 228
Prebuild/src/Core/Nodes/FileNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -34,193 +34,193 @@ using Prebuild.Core.Targets;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public enum BuildAction
-    {
+	/// <summary>
+	/// 
+	/// </summary>
+	public enum BuildAction
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		None,
+		/// <summary>
+		/// 
+		/// </summary>
+		Compile,
+		/// <summary>
+		/// 
+		/// </summary>
+		Content,
+		/// <summary>
+		/// 
+		/// </summary>
+		EmbeddedResource,
+		/// <summary>
+		/// 
+		/// </summary>
+		ApplicationDefinition,
+		/// <summary>
+		/// 
+		/// </summary>
+		Page,
         /// <summary>
-        ///
-        /// </summary>
-        None,
-        /// <summary>
-        ///
-        /// </summary>
-        Compile,
-        /// <summary>
-        ///
-        /// </summary>
-        Content,
-        /// <summary>
-        ///
-        /// </summary>
-        EmbeddedResource,
-        /// <summary>
-        ///
-        /// </summary>
-        ApplicationDefinition,
-        /// <summary>
-        ///
-        /// </summary>
-        Page,
-        /// <summary>
-        ///
+        /// 
         /// </summary>
         Copy
-    }
-
-    /// <summary>
-    ///
-    /// </summary>
-    public enum SubType
-    {
+	}
+
+	/// <summary>
+	/// 
+	/// </summary>
+	public enum SubType
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		Code,
+		/// <summary>
+		/// 
+		/// </summary>
+		Component,
         /// <summary>
-        ///
-        /// </summary>
-        Code,
-        /// <summary>
-        ///
-        /// </summary>
-        Component,
-        /// <summary>
-        ///
+        /// 
         /// </summary>
         Designer,
-        /// <summary>
-        ///
-        /// </summary>
-        Form,
-        /// <summary>
-        ///
-        /// </summary>
-        Settings,
-        /// <summary>
-        ///
-        /// </summary>
-        UserControl,
-        /// <summary>
-        ///
-        /// </summary>
-        CodeBehind,
-    }
-
-    public enum CopyToOutput
-    {
-        Never,
-        Always,
-        PreserveNewest
-    }
-
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("File")]
-    public class FileNode : DataNode
-    {
-        #region Fields
-
-        private string m_Path;
-        private string m_ResourceName = "";
-        private BuildAction? m_BuildAction;
-        private bool m_Valid;
-        private SubType? m_SubType;
-        private CopyToOutput m_CopyToOutput = CopyToOutput.Never;
-        private bool m_Link = false;
-        private string m_LinkPath = string.Empty;
+		/// <summary>
+		/// 
+		/// </summary>
+		Form,
+		/// <summary>
+		/// 
+		/// </summary>
+		Settings,
+		/// <summary>
+		/// 
+		/// </summary>
+		UserControl,
+		/// <summary>
+		/// 
+		/// </summary>
+		CodeBehind,
+	}
+
+	public enum CopyToOutput
+	{
+		Never,
+		Always,
+		PreserveNewest
+	}
+
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("File")]
+	public class FileNode : DataNode
+	{
+		#region Fields
+
+		private string m_Path;
+		private string m_ResourceName = "";
+		private BuildAction? m_BuildAction;
+		private bool m_Valid;
+		private SubType? m_SubType;
+		private CopyToOutput m_CopyToOutput = CopyToOutput.Never;
+		private bool m_Link = false;
+		private string m_LinkPath = string.Empty;
         private bool m_PreservePath = false;
 
 
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string Path
-        {
-            get
-            {
-                return m_Path;
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string ResourceName
-        {
-            get
-            {
-                return m_ResourceName;
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public BuildAction BuildAction
-        {
-            get
-            {
-                if (m_BuildAction != null)
-                    return m_BuildAction.Value;
-                else
-                    return GetBuildActionByFileName(this.Path);
-
-            }
-        }
-
-        public CopyToOutput CopyToOutput
-        {
-            get
-            {
-                return this.m_CopyToOutput;
-            }
-        }
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string Path
+		{
+			get
+			{
+				return m_Path;
+			}
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string ResourceName
+		{
+			get
+			{
+				return m_ResourceName;
+			}
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public BuildAction BuildAction
+		{
+			get
+			{
+				if (m_BuildAction != null)
+					return m_BuildAction.Value;
+				else
+					return GetBuildActionByFileName(this.Path);
+
+			}
+		}
+
+		public CopyToOutput CopyToOutput
+		{
+			get
+			{
+				return this.m_CopyToOutput;
+			}
+		}
+
+		public bool IsLink
+		{
+			get
+			{
+				return this.m_Link;
+			}
+		}
+
+		public string LinkPath
+		{
+			get
+			{
+				return this.m_LinkPath;
+			}
+		}
+		/// <summary>
+		/// 
+		/// </summary>
+		public SubType SubType
+		{
+			get
+			{
+				if (m_SubType != null)
+					return m_SubType.Value;
+				else
+					return GetSubTypeByFileName(this.Path);
+			}
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool IsValid
+		{
+			get
+			{
+				return m_Valid;
+			}
+		}
 
-        public bool IsLink
-        {
-            get
-            {
-                return this.m_Link;
-            }
-        }
-
-        public string LinkPath
-        {
-            get
-            {
-                return this.m_LinkPath;
-            }
-        }
         /// <summary>
-        ///
-        /// </summary>
-        public SubType SubType
-        {
-            get
-            {
-                if (m_SubType != null)
-                    return m_SubType.Value;
-                else
-                    return GetSubTypeByFileName(this.Path);
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool IsValid
-        {
-            get
-            {
-                return m_Valid;
-            }
-        }
-
-        /// <summary>
-        ///
+        /// 
         /// </summary>
         /// <param name="file"></param>
         /// <returns></returns>
@@ -232,61 +232,61 @@ namespace Prebuild.Core.Nodes
             }
         }
 
-        #endregion
+		#endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="node"></param>
-        public override void Parse(XmlNode node)
-        {
-            string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
-            if (buildAction != string.Empty)
-                m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
-            string subType = Helper.AttributeValue(node, "subType", string.Empty);
-            if (subType != String.Empty)
-                m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="node"></param>
+		public override void Parse(XmlNode node)
+		{
+			string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
+			if (buildAction != string.Empty)
+				m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
+			string subType = Helper.AttributeValue(node, "subType", string.Empty);
+			if (subType != String.Empty)
+				m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
 
             Console.WriteLine("[FileNode]:BuildAction is {0}", buildAction);
 
 
-            m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString());
-            this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
-            if ( this.m_Link == true )
-            {
-                this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
-            }
-            this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString()));
+			m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName.ToString());
+			this.m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
+			if ( this.m_Link == true )
+			{
+				this.m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
+			}
+			this.m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", this.m_CopyToOutput.ToString()));
             this.m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
 
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
-            if(m_Path == null)
-            {
-                m_Path = "";
-            }
-
-            m_Path = m_Path.Trim();
-            m_Valid = true;
-            if(!File.Exists(m_Path))
-            {
-                m_Valid = false;
-                Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path);
-            }
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+
+			m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
+			if(m_Path == null)
+			{
+				m_Path = "";
+			}
+
+			m_Path = m_Path.Trim();
+			m_Valid = true;
+			if(!File.Exists(m_Path))
+			{
+				m_Valid = false;
+				Kernel.Instance.Log.Write(LogType.Warning, "File does not exist: {0}", m_Path);
+			}
 
             if (System.IO.Path.GetExtension(m_Path) == ".settings")
             {
                 m_SubType = SubType.Settings;
                 m_BuildAction = BuildAction.None;
             }
-        }
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 142 - 142
Prebuild/src/Core/Nodes/FilesNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -34,36 +34,36 @@ using System.IO;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Files")]
-    public class FilesNode : DataNode
-    {
-        #region Fields
-
-        private readonly List<string> m_Files = new List<string>();
-        private readonly Dictionary<string,BuildAction> m_BuildActions = new Dictionary<string, BuildAction>();
-        private readonly Dictionary<string, SubType> m_SubTypes = new Dictionary<string, SubType>();
-        private readonly Dictionary<string, string> m_ResourceNames = new Dictionary<string, string>();
-        private readonly Dictionary<string, CopyToOutput> m_CopyToOutputs = new Dictionary<string, CopyToOutput>();
-        private readonly Dictionary<string, bool> m_Links = new Dictionary<string, bool>();
-        private readonly Dictionary<string, string> m_LinkPaths = new Dictionary<string, string>();
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Files")]
+	public class FilesNode : DataNode
+	{
+		#region Fields
+
+		private readonly List<string> m_Files = new List<string>();
+		private readonly Dictionary<string,BuildAction> m_BuildActions = new Dictionary<string, BuildAction>();
+		private readonly Dictionary<string, SubType> m_SubTypes = new Dictionary<string, SubType>();
+		private readonly Dictionary<string, string> m_ResourceNames = new Dictionary<string, string>();
+		private readonly Dictionary<string, CopyToOutput> m_CopyToOutputs = new Dictionary<string, CopyToOutput>();
+		private readonly Dictionary<string, bool> m_Links = new Dictionary<string, bool>();
+		private readonly Dictionary<string, string> m_LinkPaths = new Dictionary<string, string>();
         private readonly Dictionary<string, bool> m_PreservePaths = new Dictionary<string, bool>();
         private readonly Dictionary<string, string> m_DestinationPath = new Dictionary<string, string>();
         private readonly NameValueCollection m_CopyFiles = new NameValueCollection();
 
-        #endregion
+		#endregion
 
-        #region Properties
+		#region Properties
 
-        public int Count
-        {
-            get
-            {
-                return m_Files.Count;
-            }
-        }
+		public int Count
+		{
+			get
+			{
+				return m_Files.Count;
+			}
+		}
 
         public string[] Destinations
         {
@@ -75,19 +75,19 @@ namespace Prebuild.Core.Nodes
             get { return m_CopyFiles.Count; }
         }
 
-        #endregion
+		#endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        public BuildAction GetBuildAction(string file)
-        {
-            if(!m_BuildActions.ContainsKey(file))
-            {
-                return BuildAction.Compile;
-            }
+		public BuildAction GetBuildAction(string file)
+		{
+			if(!m_BuildActions.ContainsKey(file))
+			{
+				return BuildAction.Compile;
+			}
 
-            return m_BuildActions[file];
-        }
+			return m_BuildActions[file];
+		}
 
         public string GetDestinationPath(string file)
         {
@@ -103,57 +103,57 @@ namespace Prebuild.Core.Nodes
             return m_CopyFiles.GetValues(dest);
         }
 
-        public CopyToOutput GetCopyToOutput(string file)
-        {
-            if (!m_CopyToOutputs.ContainsKey(file))
-            {
-                return CopyToOutput.Never;
-            }
-            return m_CopyToOutputs[file];
-        }
-
-        public bool GetIsLink(string file)
-        {
-            if (!m_Links.ContainsKey(file))
-            {
-                return false;
-            }
-            return m_Links[file];
-        }
+		public CopyToOutput GetCopyToOutput(string file)
+		{
+			if (!m_CopyToOutputs.ContainsKey(file))
+			{
+				return CopyToOutput.Never;
+			}
+			return m_CopyToOutputs[file];
+		}
+
+		public bool GetIsLink(string file)
+		{
+			if (!m_Links.ContainsKey(file))
+			{
+				return false;
+			}
+			return m_Links[file];
+		}
 
         public bool Contains(string file)
         {
             return m_Files.Contains(file);
         }
 
-        public string GetLinkPath( string file )
-        {
-            if ( !m_LinkPaths.ContainsKey( file ) )
-            {
-                return string.Empty;
-            }
-            return m_LinkPaths[ file ];
-        }
-
-        public SubType GetSubType(string file)
-        {
-            if(!m_SubTypes.ContainsKey(file))
-            {
-                return SubType.Code;
-            }
-
-            return m_SubTypes[file];
-        }
-
-        public string GetResourceName(string file)
-        {
-            if(!m_ResourceNames.ContainsKey(file))
-            {
-                return string.Empty;
-            }
-
-            return m_ResourceNames[file];
-        }
+		public string GetLinkPath( string file )
+		{
+			if ( !m_LinkPaths.ContainsKey( file ) )
+			{
+				return string.Empty;
+			}
+			return m_LinkPaths[ file ];
+		}
+
+		public SubType GetSubType(string file)
+		{
+			if(!m_SubTypes.ContainsKey(file))
+			{
+				return SubType.Code;
+			}
+
+			return m_SubTypes[file];
+		}
+
+		public string GetResourceName(string file)
+		{
+			if(!m_ResourceNames.ContainsKey(file))
+			{
+				return string.Empty;
+			}
+
+			return m_ResourceNames[file];
+		}
 
         public bool GetPreservePath( string file )
         {
@@ -165,45 +165,45 @@ namespace Prebuild.Core.Nodes
             return m_PreservePaths[ file ];
         }
 
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-            foreach(XmlNode child in node.ChildNodes)
-            {
-                IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
-                if(dataNode is FileNode)
-                {
-                    FileNode fileNode = (FileNode)dataNode;
-                    if(fileNode.IsValid)
-                    {
-                        if (!m_Files.Contains(fileNode.Path))
-                        {
-                            m_Files.Add(fileNode.Path);
-                            m_BuildActions[fileNode.Path] = fileNode.BuildAction;
-                            m_SubTypes[fileNode.Path] = fileNode.SubType;
-                            m_ResourceNames[fileNode.Path] = fileNode.ResourceName;
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+			foreach(XmlNode child in node.ChildNodes)
+			{
+				IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
+				if(dataNode is FileNode)
+				{
+					FileNode fileNode = (FileNode)dataNode;
+					if(fileNode.IsValid)
+					{
+						if (!m_Files.Contains(fileNode.Path))
+						{
+							m_Files.Add(fileNode.Path);
+							m_BuildActions[fileNode.Path] = fileNode.BuildAction;
+							m_SubTypes[fileNode.Path] = fileNode.SubType;
+							m_ResourceNames[fileNode.Path] = fileNode.ResourceName;
                             m_PreservePaths[ fileNode.Path ] = fileNode.PreservePath;
                             m_Links[ fileNode.Path ] = fileNode.IsLink;
-                            m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath;
-                            m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput;
-
-                        }
-                    }
-                }
-                else if(dataNode is MatchNode)
-                {
-                    foreach(string file in ((MatchNode)dataNode).Files)
-                    {
+							m_LinkPaths[ fileNode.Path ] = fileNode.LinkPath;
+							m_CopyToOutputs[ fileNode.Path ] = fileNode.CopyToOutput;
+
+						}
+					}
+				}
+				else if(dataNode is MatchNode)
+				{
+					foreach(string file in ((MatchNode)dataNode).Files)
+					{
                         MatchNode matchNode = (MatchNode)dataNode;
-                        if (!m_Files.Contains(file))
-                        {
-                            m_Files.Add(file);
-                            if (matchNode.BuildAction == null)
+						if (!m_Files.Contains(file))
+						{
+							m_Files.Add(file);
+						    if (matchNode.BuildAction == null)
                                 m_BuildActions[file] = GetBuildActionByFileName(file);
-                            else
+						    else
                                 m_BuildActions[file] = matchNode.BuildAction.Value;
 
                             if (matchNode.BuildAction == BuildAction.Copy)
@@ -212,27 +212,27 @@ namespace Prebuild.Core.Nodes
                                 m_DestinationPath[file] = matchNode.DestinationPath;
                             }
 
-                            m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value;
+						    m_SubTypes[file] = matchNode.SubType == null ? GetSubTypeByFileName(file) : matchNode.SubType.Value;
                             m_ResourceNames[ file ] = matchNode.ResourceName;
                             m_PreservePaths[ file ] = matchNode.PreservePath;
                             m_Links[ file ] = matchNode.IsLink;
-                            m_LinkPaths[ file ] = matchNode.LinkPath;
-                            m_CopyToOutputs[ file ] = matchNode.CopyToOutput;
-
-                        }
-                    }
-                }
-            }
-        }
-
-        // TODO: Check in to why StringCollection's enumerator doesn't implement
-        // IEnumerator?
-        public IEnumerator<string> GetEnumerator()
-        {
-            return m_Files.GetEnumerator();
-        }
-
-        #endregion
+							m_LinkPaths[ file ] = matchNode.LinkPath;
+							m_CopyToOutputs[ file ] = matchNode.CopyToOutput;
+
+						}
+					}
+				}
+			}
+		}
+
+		// TODO: Check in to why StringCollection's enumerator doesn't implement
+		// IEnumerator?
+		public IEnumerator<string> GetEnumerator()
+		{
+			return m_Files.GetEnumerator();
+		}
+
+		#endregion
 
     }
 }

+ 229 - 229
Prebuild/src/Core/Nodes/MatchNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -35,51 +35,51 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Match")]
-    public class MatchNode : DataNode
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Match")]
+	public class MatchNode : DataNode
+	{
+		#region Fields
 
         private readonly List<string> m_Files = new List<string>();
-        private Regex m_Regex;
-        private BuildAction? m_BuildAction;
-        private SubType? m_SubType;
-        string m_ResourceName = "";
-        private CopyToOutput m_CopyToOutput;
-        private bool m_Link;
-        private string m_LinkPath;
+		private Regex m_Regex;
+		private BuildAction? m_BuildAction;
+		private SubType? m_SubType;
+		string m_ResourceName = "";
+		private CopyToOutput m_CopyToOutput;
+		private bool m_Link;
+		private string m_LinkPath;
         private bool m_PreservePath;
         private string m_Destination = "";
         private readonly List<ExcludeNode> m_Exclusions = new List<ExcludeNode>();
 
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        ///
-        /// </summary>
-        public IEnumerable<string> Files
-        {
-            get
-            {
-                return m_Files;
-            }
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        public BuildAction? BuildAction
-        {
-            get
-            {
-                return m_BuildAction;
-            }
-        }
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public IEnumerable<string> Files
+		{
+			get
+			{
+				return m_Files;
+			}
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public BuildAction? BuildAction
+		{
+			get
+			{
+				return m_BuildAction;
+			}
+		}
 
         public string DestinationPath
         {
@@ -88,50 +88,50 @@ namespace Prebuild.Core.Nodes
                 return m_Destination;
             }
         }
-        /// <summary>
-        ///
-        /// </summary>
-        public SubType? SubType
-        {
-            get
-            {
-                return m_SubType;
-            }
-        }
-
-        public CopyToOutput CopyToOutput
-        {
-            get
-            {
-                return m_CopyToOutput;
-            }
-        }
-
-        public bool IsLink
-        {
-            get
-            {
-                return m_Link;
-            }
-        }
-
-        public string LinkPath
-        {
-            get
-            {
-                return m_LinkPath;
-            }
-        }
-        /// <summary>
-        ///
-        /// </summary>
-        public string ResourceName
-        {
-            get
-            {
-                return m_ResourceName;
-            }
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		public SubType? SubType
+		{
+			get
+			{
+				return m_SubType;
+			}
+		}
+
+		public CopyToOutput CopyToOutput
+		{
+			get
+			{
+				return m_CopyToOutput;
+			}
+		}
+
+		public bool IsLink
+		{
+			get
+			{
+				return m_Link;
+			}
+		}
+
+		public string LinkPath
+		{
+			get
+			{
+				return m_LinkPath;
+			}
+		}
+		/// <summary>
+		/// 
+		/// </summary>
+		public string ResourceName
+		{
+			get
+			{
+				return m_ResourceName;
+			}
+		}
 
         public bool PreservePath
         {
@@ -141,27 +141,27 @@ namespace Prebuild.Core.Nodes
             }
         }
 
-        #endregion
-
-        #region Private Methods
-
-        /// <summary>
-        /// Recurses the directories.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="pattern">The pattern.</param>
-        /// <param name="recurse">if set to <c>true</c> [recurse].</param>
-        /// <param name="useRegex">if set to <c>true</c> [use regex].</param>
-        private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List<ExcludeNode> exclusions)
-        {
-            Match match;
-            try
-            {
-                string[] files;
-
-                Boolean excludeFile;
-                if(!useRegex)
-                {
+		#endregion
+
+		#region Private Methods
+
+		/// <summary>
+		/// Recurses the directories.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <param name="pattern">The pattern.</param>
+		/// <param name="recurse">if set to <c>true</c> [recurse].</param>
+		/// <param name="useRegex">if set to <c>true</c> [use regex].</param>
+		private void RecurseDirectories(string path, string pattern, bool recurse, bool useRegex, List<ExcludeNode> exclusions)
+		{
+			Match match;
+		    try
+			{
+				string[] files;
+
+			    Boolean excludeFile;
+			    if(!useRegex)
+				{
                     try
                     {
                         files = Directory.GetFiles(path, pattern);
@@ -169,7 +169,7 @@ namespace Prebuild.Core.Nodes
                     catch (IOException)
                     {
                         // swallow weird IOException error when running in a virtual box
-                        // guest OS on a network share when the host OS is not Windows.
+                        // guest OS on a network share when the host OS is not Windows.  
                         // This seems to happen on network shares
                         // when no files match, and may be related to this report:
                         // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=254546
@@ -177,20 +177,20 @@ namespace Prebuild.Core.Nodes
                         files = null;
                     }
 
-                    if(files != null)
-                    {
-                        foreach (string file in files)
-                        {
+					if(files != null)
+					{
+					    foreach (string file in files)
+						{
                             excludeFile = false;
-                            string fileTemp;
-                            if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\")
-                            {
-                                fileTemp = file.Substring(2);
-                            }
-                            else
-                            {
-                                fileTemp = file;
-                            }
+						    string fileTemp;
+						    if (file.Substring(0,2) == "./" || file.Substring(0,2) == ".\\")
+							{
+								fileTemp = file.Substring(2);
+							}
+							else
+							{
+								fileTemp = file;
+							}
 
                             // Check all excludions and set flag if there are any hits.
                             foreach ( ExcludeNode exclude in exclusions )
@@ -205,18 +205,18 @@ namespace Prebuild.Core.Nodes
                                 m_Files.Add( fileTemp );
                             }
 
-                        }
-                    }
+						}
+					}
 
                     // don't call return here, because we may need to recursively search directories below
                     // this one, even if no matches were found in this directory.
-                }
-                else
-                {
-                    try
-                     {
-                        files = Directory.GetFiles(path);
-                    }
+				}
+				else
+				{
+					try
+ 					{
+						files = Directory.GetFiles(path);
+					}
                     catch (IOException)
                     {
                         // swallow weird IOException error when running in a virtual box
@@ -248,12 +248,12 @@ namespace Prebuild.Core.Nodes
                             }
                         }
                     }
-                }
-
-                if(recurse)
-                {
-                    string[] dirs = Directory.GetDirectories(path);
-                    if(dirs != null && dirs.Length > 0)
+				}
+                
+				if(recurse)
+				{
+					string[] dirs = Directory.GetDirectories(path);
+					if(dirs != null && dirs.Length > 0)
                     {
                         foreach (string str in dirs)
                         {
@@ -265,96 +265,96 @@ namespace Prebuild.Core.Nodes
                             RecurseDirectories(Helper.NormalizePath(str), pattern, recurse, useRegex, exclusions);
                         }
                     }
-                }
-            }
-            catch(DirectoryNotFoundException)
-            {
-                return;
-            }
-            catch(ArgumentException)
-            {
-                return;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="node"></param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-            string path = Helper.AttributeValue(node, "path", ".");
-            string pattern = Helper.AttributeValue(node, "pattern", "*");
+				}
+			}
+			catch(DirectoryNotFoundException)
+			{
+				return;
+			}
+			catch(ArgumentException)
+			{
+				return;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="node"></param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+			string path = Helper.AttributeValue(node, "path", ".");
+			string pattern = Helper.AttributeValue(node, "pattern", "*");
             string destination = Helper.AttributeValue(node, "destination", string.Empty);
-            bool recurse = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "recurse", "false"));
-            bool useRegex = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "useRegex", "false"));
-            string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
-            if (buildAction != string.Empty)
-                m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
-
-
-            //TODO: Figure out where the subtype node is being assigned
-            //string subType = Helper.AttributeValue(node, "subType", string.Empty);
-            //if (subType != String.Empty)
-            //    m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
-            m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName);
-            m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", m_CopyToOutput.ToString()));
-            m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
-            if ( m_Link )
-            {
-                m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
-            }
+			bool recurse = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "recurse", "false"));
+			bool useRegex = (bool)Helper.TranslateValue(typeof(bool), Helper.AttributeValue(node, "useRegex", "false"));
+			string buildAction = Helper.AttributeValue(node, "buildAction", String.Empty);
+			if (buildAction != string.Empty)
+				m_BuildAction = (BuildAction)Enum.Parse(typeof(BuildAction), buildAction);
+
+
+			//TODO: Figure out where the subtype node is being assigned
+			//string subType = Helper.AttributeValue(node, "subType", string.Empty);
+			//if (subType != String.Empty)
+			//    m_SubType = (SubType)Enum.Parse(typeof(SubType), subType);
+			m_ResourceName = Helper.AttributeValue(node, "resourceName", m_ResourceName);
+			m_CopyToOutput = (CopyToOutput) Enum.Parse(typeof(CopyToOutput), Helper.AttributeValue(node, "copyToOutput", m_CopyToOutput.ToString()));
+			m_Link = bool.Parse(Helper.AttributeValue(node, "link", bool.FalseString));
+			if ( m_Link )
+			{
+				m_LinkPath = Helper.AttributeValue( node, "linkPath", string.Empty );
+			}
             m_PreservePath = bool.Parse( Helper.AttributeValue( node, "preservePath", bool.FalseString ) );
 
             if ( buildAction == "Copy")
                 m_Destination = destination;
 
-            if(path != null && path.Length == 0)
-                path = ".";//use current directory
-
-            //throw new WarningException("Match must have a 'path' attribute");
-
-            if(pattern == null)
-            {
-                throw new WarningException("Match must have a 'pattern' attribute");
-            }
-
-            path = Helper.NormalizePath(path);
-            if(!Directory.Exists(path))
-            {
-                throw new WarningException("Match path does not exist: {0}", path);
-            }
-
-            try
-            {
-                if(useRegex)
-                {
-                    m_Regex = new Regex(pattern);
-                }
-            }
-            catch(ArgumentException ex)
-            {
-                throw new WarningException("Could not compile regex pattern: {0}", ex.Message);
-            }
-
-
-            foreach(XmlNode child in node.ChildNodes)
-            {
-                IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
-                if(dataNode is ExcludeNode)
-                {
-                    ExcludeNode excludeNode = (ExcludeNode)dataNode;
+			if(path != null && path.Length == 0)
+				path = ".";//use current directory
+            
+			//throw new WarningException("Match must have a 'path' attribute");
+
+			if(pattern == null)
+			{
+				throw new WarningException("Match must have a 'pattern' attribute");
+			}
+
+			path = Helper.NormalizePath(path);
+			if(!Directory.Exists(path))
+			{
+				throw new WarningException("Match path does not exist: {0}", path);
+			}
+
+			try
+			{
+				if(useRegex)
+				{
+					m_Regex = new Regex(pattern);
+				}
+			}
+			catch(ArgumentException ex)
+			{
+				throw new WarningException("Could not compile regex pattern: {0}", ex.Message);
+			}
+
+
+			foreach(XmlNode child in node.ChildNodes)
+			{
+				IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
+				if(dataNode is ExcludeNode)
+				{
+					ExcludeNode excludeNode = (ExcludeNode)dataNode;
                     m_Exclusions.Add( excludeNode );
-                }
-            }
+				}
+			}
 
             RecurseDirectories( path, pattern, recurse, useRegex, m_Exclusions );
 
@@ -371,8 +371,8 @@ namespace Prebuild.Core.Nodes
                 throw new WarningException("Match" + projectName + " returned no files: {0}{1}", Helper.EndPath(path), pattern);
             }
             m_Regex = null;
-        }
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 589 - 589
Prebuild/src/Core/Nodes/OptionsNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -34,273 +34,273 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Options")]
-    public class OptionsNode : DataNode
-    {
-        #region Fields
-
-        private static readonly Dictionary<string,FieldInfo> m_OptionFields = new Dictionary<string, FieldInfo>();
-
-        [OptionNode("CompilerDefines")]
-        private string m_CompilerDefines = "";
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string CompilerDefines
-        {
-            get
-            {
-                return m_CompilerDefines;
-            }
-            set
-            {
-                m_CompilerDefines = value;
-            }
-        }
-
-        [OptionNode("OptimizeCode")]
-        private bool m_OptimizeCode;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool OptimizeCode
-        {
-            get
-            {
-                return m_OptimizeCode;
-            }
-            set
-            {
-                m_OptimizeCode = value;
-            }
-        }
-
-        [OptionNode("CheckUnderflowOverflow")]
-        private bool m_CheckUnderflowOverflow;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool CheckUnderflowOverflow
-        {
-            get
-            {
-                return m_CheckUnderflowOverflow;
-            }
-            set
-            {
-                m_CheckUnderflowOverflow = value;
-            }
-        }
-
-        [OptionNode("AllowUnsafe")]
-        private bool m_AllowUnsafe;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool AllowUnsafe
-        {
-            get
-            {
-                return m_AllowUnsafe;
-            }
-            set
-            {
-                m_AllowUnsafe = value;
-            }
-        }
-
-        [OptionNode("PreBuildEvent")]
-        private string m_PreBuildEvent;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string PreBuildEvent
-        {
-            get
-            {
-                return m_PreBuildEvent;
-            }
-            set
-            {
-                m_PreBuildEvent = value;
-            }
-        }
-
-        [OptionNode("PostBuildEvent")]
-        private string m_PostBuildEvent;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string PostBuildEvent
-        {
-            get
-            {
-                return m_PostBuildEvent;
-            }
-            set
-            {
-                m_PostBuildEvent = value;
-            }
-        }
-
-        [OptionNode("PreBuildEventArgs")]
-        private string m_PreBuildEventArgs;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string PreBuildEventArgs
-        {
-            get
-            {
-                return m_PreBuildEventArgs;
-            }
-            set
-            {
-                m_PreBuildEventArgs = value;
-            }
-        }
-
-        [OptionNode("PostBuildEventArgs")]
-        private string m_PostBuildEventArgs;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string PostBuildEventArgs
-        {
-            get
-            {
-                return m_PostBuildEventArgs;
-            }
-            set
-            {
-                m_PostBuildEventArgs = value;
-            }
-        }
-
-        [OptionNode("RunPostBuildEvent")]
-        private string m_RunPostBuildEvent;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string RunPostBuildEvent
-        {
-            get
-            {
-                return m_RunPostBuildEvent;
-            }
-            set
-            {
-                m_RunPostBuildEvent = value;
-            }
-        }
-
-        [OptionNode("RunScript")]
-        private string m_RunScript;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string RunScript
-        {
-            get
-            {
-                return m_RunScript;
-            }
-            set
-            {
-                m_RunScript = value;
-            }
-        }
-
-        [OptionNode("WarningLevel")]
-        private int m_WarningLevel = 4;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public int WarningLevel
-        {
-            get
-            {
-                return m_WarningLevel;
-            }
-            set
-            {
-                m_WarningLevel = value;
-            }
-        }
-
-        [OptionNode("WarningsAsErrors")]
-        private bool m_WarningsAsErrors;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool WarningsAsErrors
-        {
-            get
-            {
-                return m_WarningsAsErrors;
-            }
-            set
-            {
-                m_WarningsAsErrors = value;
-            }
-        }
-
-        [OptionNode("SuppressWarnings")]
-        private string m_SuppressWarnings = "";
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string SuppressWarnings
-        {
-            get
-            {
-                return m_SuppressWarnings;
-            }
-            set
-            {
-                m_SuppressWarnings = value;
-            }
-        }
-
-        [OptionNode("OutputPath")]
-        private string m_OutputPath = "bin/";
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string OutputPath
-        {
-            get
-            {
-                return m_OutputPath;
-            }
-            set
-            {
-                m_OutputPath = value;
-            }
-        }
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Options")]
+	public class OptionsNode : DataNode
+	{
+		#region Fields
+
+		private static readonly Dictionary<string,FieldInfo> m_OptionFields = new Dictionary<string, FieldInfo>();
+
+		[OptionNode("CompilerDefines")]
+		private string m_CompilerDefines = "";
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string CompilerDefines
+		{
+			get
+			{
+				return m_CompilerDefines;
+			}
+			set
+			{
+				m_CompilerDefines = value;
+			}
+		}
+        
+		[OptionNode("OptimizeCode")]
+		private bool m_OptimizeCode;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool OptimizeCode
+		{
+			get
+			{
+				return m_OptimizeCode;
+			}
+			set
+			{
+				m_OptimizeCode = value;
+			}
+		}
+        
+		[OptionNode("CheckUnderflowOverflow")]
+		private bool m_CheckUnderflowOverflow;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool CheckUnderflowOverflow
+		{
+			get
+			{
+				return m_CheckUnderflowOverflow;
+			}
+			set
+			{
+				m_CheckUnderflowOverflow = value;
+			}
+		}
+        
+		[OptionNode("AllowUnsafe")]
+		private bool m_AllowUnsafe;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool AllowUnsafe
+		{
+			get
+			{
+				return m_AllowUnsafe;
+			}
+			set
+			{
+				m_AllowUnsafe = value;
+			}
+		}
+		
+		[OptionNode("PreBuildEvent")]
+		private string m_PreBuildEvent;
+		
+		/// <summary>
+		/// 
+		/// </summary>
+		public string PreBuildEvent 
+		{
+			get 
+			{
+				return m_PreBuildEvent;
+			}
+			set 
+			{
+				m_PreBuildEvent = value;
+			}
+		}
+		
+		[OptionNode("PostBuildEvent")]
+		private string m_PostBuildEvent;
+		
+		/// <summary>
+		/// 
+		/// </summary>
+		public string PostBuildEvent 
+		{
+			get 
+			{
+				return m_PostBuildEvent;
+			}
+			set 
+			{
+				m_PostBuildEvent = value;
+			}
+		}
+			
+		[OptionNode("PreBuildEventArgs")]
+		private string m_PreBuildEventArgs;
+		
+		/// <summary>
+		/// 
+		/// </summary>
+		public string PreBuildEventArgs
+		{
+			get 
+			{
+				return m_PreBuildEventArgs;
+			}
+			set 
+			{
+				m_PreBuildEventArgs = value;
+			}
+		}
+		
+		[OptionNode("PostBuildEventArgs")]
+		private string m_PostBuildEventArgs;
+		
+		/// <summary>
+		/// 
+		/// </summary>
+		public string PostBuildEventArgs
+		{
+			get 
+			{
+				return m_PostBuildEventArgs;
+			}
+			set 
+			{
+				m_PostBuildEventArgs = value;
+			}
+		}
+		
+		[OptionNode("RunPostBuildEvent")]
+		private string m_RunPostBuildEvent;
+		
+		/// <summary>
+		/// 
+		/// </summary>
+		public string RunPostBuildEvent 
+		{
+			get 
+			{
+				return m_RunPostBuildEvent;
+			}
+			set 
+			{
+				m_RunPostBuildEvent = value;
+			}
+		}
+		
+		[OptionNode("RunScript")]
+		private string m_RunScript;
+		
+		/// <summary>
+		/// 
+		/// </summary>
+		public string RunScript 
+		{
+			get 
+			{
+				return m_RunScript;
+			}
+			set 
+			{
+				m_RunScript = value;
+			}
+		}
+        
+		[OptionNode("WarningLevel")]
+		private int m_WarningLevel = 4;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public int WarningLevel
+		{
+			get
+			{
+				return m_WarningLevel;
+			}
+			set
+			{
+				m_WarningLevel = value;
+			}
+		}
+        
+		[OptionNode("WarningsAsErrors")]
+		private bool m_WarningsAsErrors;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool WarningsAsErrors
+		{
+			get
+			{
+				return m_WarningsAsErrors;
+			}
+			set
+			{
+				m_WarningsAsErrors = value;
+			}
+		}
+
+		[OptionNode("SuppressWarnings")]
+		private string m_SuppressWarnings = "";
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string SuppressWarnings
+		{
+			get
+			{
+				return m_SuppressWarnings;
+			}
+			set
+			{
+				m_SuppressWarnings = value;
+			}
+		}
+        
+		[OptionNode("OutputPath")]
+		private string m_OutputPath = "bin/";
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string OutputPath
+		{
+			get
+			{
+				return m_OutputPath;
+			}
+			set
+			{
+				m_OutputPath = value;
+			}
+		}
 
         [OptionNode("GenerateDocumentation")]
         private bool m_GenerateDocumentation;
 
         /// <summary>
-        ///
+        /// 
         /// </summary>
         public bool GenerateDocumentation
         {
@@ -314,321 +314,321 @@ namespace Prebuild.Core.Nodes
             }
         }
 
-        [OptionNode("GenerateXmlDocFile")]
-        private bool m_GenerateXmlDocFile;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool GenerateXmlDocFile
-        {
-            get
-            {
-                return m_GenerateXmlDocFile;
-            }
-            set
-            {
-                m_GenerateXmlDocFile = value;
-            }
-        }
-
-        [OptionNode("XmlDocFile")]
-        private string m_XmlDocFile = "";
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string XmlDocFile
-        {
-            get
-            {
-                return m_XmlDocFile;
-            }
-            set
-            {
-                m_XmlDocFile = value;
-            }
-        }
-
-        [OptionNode("KeyFile")]
-        private string m_KeyFile = "";
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string KeyFile
-        {
-            get
-            {
-                return m_KeyFile;
-            }
-            set
-            {
-                m_KeyFile = value;
-            }
-        }
-
-        [OptionNode("DebugInformation")]
-        private bool m_DebugInformation;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool DebugInformation
-        {
-            get
-            {
-                return m_DebugInformation;
-            }
-            set
-            {
-                m_DebugInformation = value;
-            }
-        }
-
-        [OptionNode("RegisterComInterop")]
-        private bool m_RegisterComInterop;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool RegisterComInterop
-        {
-            get
-            {
-                return m_RegisterComInterop;
-            }
-            set
-            {
-                m_RegisterComInterop = value;
-            }
-        }
-
-        [OptionNode("RemoveIntegerChecks")]
-        private bool m_RemoveIntegerChecks;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool RemoveIntegerChecks
-        {
-            get
-            {
-                return m_RemoveIntegerChecks;
-            }
-            set
-            {
-                m_RemoveIntegerChecks = value;
-            }
-        }
-
-        [OptionNode("IncrementalBuild")]
-        private bool m_IncrementalBuild;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool IncrementalBuild
-        {
-            get
-            {
-                return m_IncrementalBuild;
-            }
-            set
-            {
-                m_IncrementalBuild = value;
-            }
-        }
-
-        [OptionNode("BaseAddress")]
-        private string m_BaseAddress = "285212672";
-
-        /// <summary>
-        ///
-        /// </summary>
-        public string BaseAddress
-        {
-            get
-            {
-                return m_BaseAddress;
-            }
-            set
-            {
-                m_BaseAddress = value;
-            }
-        }
-
-        [OptionNode("FileAlignment")]
-        private int m_FileAlignment = 4096;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public int FileAlignment
-        {
-            get
-            {
-                return m_FileAlignment;
-            }
-            set
-            {
-                m_FileAlignment = value;
-            }
-        }
-
-        [OptionNode("NoStdLib")]
-        private bool m_NoStdLib;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public bool NoStdLib
-        {
-            get
-            {
-                return m_NoStdLib;
-            }
-            set
-            {
-                m_NoStdLib = value;
-            }
-        }
-
-        private readonly List<string> m_FieldsDefined = new List<string>();
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Initializes the <see cref="OptionsNode"/> class.
-        /// </summary>
-        static OptionsNode()
-        {
-            Type t = typeof(OptionsNode);
-
-            foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
-            {
-                object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
-                if(attrs == null || attrs.Length < 1)
-                {
-                    continue;
-                }
-
-                OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0];
-                m_OptionFields[ona.NodeName] = f;
-            }
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the <see cref="Object"/> at the specified index.
-        /// </summary>
-        /// <value></value>
-        public object this[string index]
-        {
-            get
-            {
-                if(!m_OptionFields.ContainsKey(index))
-                {
-                    return null;
-                }
-
-                FieldInfo f = m_OptionFields[index];
-                return f.GetValue(this);
-            }
-        }
-
-        /// <summary>
-        /// Gets the <see cref="Object"/> at the specified index.
-        /// </summary>
-        /// <value></value>
-        public object this[string index, object defaultValue]
-        {
-            get
-            {
-                object valueObject = this[index];
-                if(valueObject !=  null && valueObject is string && ((string)valueObject).Length == 0)
-                {
-                    return defaultValue;
-                }
-                return valueObject;
-            }
-        }
-
-
-        #endregion
-
-        #region Private Methods
-
-        private void FlagDefined(string name)
-        {
-            if(!m_FieldsDefined.Contains(name))
-            {
-                m_FieldsDefined.Add(name);
-            }
-        }
-
-        private void SetOption(string nodeName, string val)
-        {
-            lock(m_OptionFields)
-            {
-                if(!m_OptionFields.ContainsKey(nodeName))
-                {
-                    return;
-                }
-
-                FieldInfo f = m_OptionFields[nodeName];
-                f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
-                FlagDefined(f.Name);
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            foreach(XmlNode child in node.ChildNodes)
-            {
-                SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText));
-            }
-        }
-
-        /// <summary>
-        /// Copies to.
-        /// </summary>
-        /// <param name="opt">The opt.</param>
-        public void CopyTo(OptionsNode opt)
-        {
-            if(opt == null)
-            {
-                return;
-            }
-
-            foreach(FieldInfo f in m_OptionFields.Values)
-            {
-                if(m_FieldsDefined.Contains(f.Name))
-                {
-                    f.SetValue(opt, f.GetValue(this));
-                    opt.m_FieldsDefined.Add(f.Name);
-                }
-            }
-        }
-
-        #endregion
-    }
+		[OptionNode("GenerateXmlDocFile")]
+		private bool m_GenerateXmlDocFile;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool GenerateXmlDocFile
+		{
+			get
+			{
+				return m_GenerateXmlDocFile;
+			}
+			set
+			{
+				m_GenerateXmlDocFile = value;
+			}
+		}
+        
+		[OptionNode("XmlDocFile")]
+		private string m_XmlDocFile = "";
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string XmlDocFile
+		{
+			get
+			{
+				return m_XmlDocFile;
+			}
+			set
+			{
+				m_XmlDocFile = value;
+			}
+		}
+
+		[OptionNode("KeyFile")]
+		private string m_KeyFile = "";
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string KeyFile
+		{
+			get
+			{
+				return m_KeyFile;
+			}
+			set
+			{
+				m_KeyFile = value;
+			}
+		}
+        
+		[OptionNode("DebugInformation")]
+		private bool m_DebugInformation;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool DebugInformation
+		{
+			get
+			{
+				return m_DebugInformation;
+			}
+			set
+			{
+				m_DebugInformation = value;
+			}
+		}
+        
+		[OptionNode("RegisterComInterop")]
+		private bool m_RegisterComInterop;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool RegisterComInterop
+		{
+			get
+			{
+				return m_RegisterComInterop;
+			}
+			set
+			{
+				m_RegisterComInterop = value;
+			}
+		}
+
+		[OptionNode("RemoveIntegerChecks")]
+		private bool m_RemoveIntegerChecks;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool RemoveIntegerChecks
+		{
+			get
+			{
+				return m_RemoveIntegerChecks;
+			}
+			set
+			{
+				m_RemoveIntegerChecks = value;
+			}
+		}
+        
+		[OptionNode("IncrementalBuild")]
+		private bool m_IncrementalBuild;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool IncrementalBuild
+		{
+			get
+			{
+				return m_IncrementalBuild;
+			}
+			set
+			{
+				m_IncrementalBuild = value;
+			}
+		}
+        
+		[OptionNode("BaseAddress")]
+		private string m_BaseAddress = "285212672";
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public string BaseAddress
+		{
+			get
+			{
+				return m_BaseAddress;
+			}
+			set
+			{
+				m_BaseAddress = value;
+			}
+		}
+        
+		[OptionNode("FileAlignment")]
+		private int m_FileAlignment = 4096;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public int FileAlignment
+		{
+			get
+			{
+				return m_FileAlignment;
+			}
+			set
+			{
+				m_FileAlignment = value;
+			}
+		}
+        
+		[OptionNode("NoStdLib")]
+		private bool m_NoStdLib;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public bool NoStdLib
+		{
+			get
+			{
+				return m_NoStdLib;
+			}
+			set
+			{
+				m_NoStdLib = value;
+			}
+		}
+
+		private readonly List<string> m_FieldsDefined = new List<string>();
+
+		#endregion
+
+		#region Constructors
+
+		/// <summary>
+		/// Initializes the <see cref="OptionsNode"/> class.
+		/// </summary>
+		static OptionsNode()
+		{
+			Type t = typeof(OptionsNode);
+            
+			foreach(FieldInfo f in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
+			{
+				object[] attrs = f.GetCustomAttributes(typeof(OptionNodeAttribute), false);
+				if(attrs == null || attrs.Length < 1)
+				{
+					continue;
+				}
+
+				OptionNodeAttribute ona = (OptionNodeAttribute)attrs[0];
+				m_OptionFields[ona.NodeName] = f;
+			}
+		}
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the <see cref="Object"/> at the specified index.
+		/// </summary>
+		/// <value></value>
+		public object this[string index]
+		{
+			get
+			{
+				if(!m_OptionFields.ContainsKey(index))
+				{
+					return null;
+				}
+
+				FieldInfo f = m_OptionFields[index];
+				return f.GetValue(this);
+			}
+		}
+		
+		/// <summary>
+		/// Gets the <see cref="Object"/> at the specified index.
+		/// </summary>
+		/// <value></value>
+		public object this[string index, object defaultValue]
+		{
+			get
+			{
+				object valueObject = this[index];
+				if(valueObject !=  null && valueObject is string && ((string)valueObject).Length == 0) 
+				{
+					return defaultValue;
+				}
+				return valueObject;
+			}
+		}
+
+
+		#endregion
+
+		#region Private Methods
+
+		private void FlagDefined(string name)
+		{
+			if(!m_FieldsDefined.Contains(name))
+			{
+				m_FieldsDefined.Add(name);
+			}
+		}
+
+		private void SetOption(string nodeName, string val)
+		{
+			lock(m_OptionFields)
+			{
+				if(!m_OptionFields.ContainsKey(nodeName))
+				{
+					return;
+				}
+
+				FieldInfo f = m_OptionFields[nodeName];
+				f.SetValue(this, Helper.TranslateValue(f.FieldType, val));
+				FlagDefined(f.Name);
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+
+			foreach(XmlNode child in node.ChildNodes)
+			{
+				SetOption(child.Name, Helper.InterpolateForEnvironmentVariables(child.InnerText));
+			}
+		}
+
+		/// <summary>
+		/// Copies to.
+		/// </summary>
+		/// <param name="opt">The opt.</param>
+		public void CopyTo(OptionsNode opt)
+		{
+			if(opt == null)
+			{
+				return;
+			}
+
+			foreach(FieldInfo f in m_OptionFields.Values)
+			{
+				if(m_FieldsDefined.Contains(f.Name))
+				{
+					f.SetValue(opt, f.GetValue(this));
+					opt.m_FieldsDefined.Add(f.Name);
+				}
+			}
+		}
+
+		#endregion        
+	}
 }

+ 83 - 83
Prebuild/src/Core/Nodes/ProcessNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,77 +32,77 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Process")]
-    public class ProcessNode : DataNode
-    {
-        #region Fields
-
-        private string m_Path;
-        private bool m_IsValid = true;
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the path.
-        /// </summary>
-        /// <value>The path.</value>
-        public string Path
-        {
-            get
-            {
-                return m_Path;
-            }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether this instance is valid.
-        /// </summary>
-        /// <value><c>true</c> if this instance is valid; otherwise, <c>false</c>.</value>
-        public bool IsValid
-        {
-            get
-            {
-                return m_IsValid;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
-            if(m_Path == null)
-            {
-                m_Path = "";
-            }
-
-            try
-            {
-                m_Path = Helper.ResolvePath(m_Path);
-            }
-            catch(ArgumentException)
-            {
-                Kernel.Instance.Log.Write(LogType.Warning, "Could not find prebuild file for processing: {0}", m_Path);
-                m_IsValid = false;
-            }
-        }
-
-        #endregion
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Process")]
+	public class ProcessNode : DataNode
+	{
+		#region Fields
+
+		private string m_Path;
+		private bool m_IsValid = true;
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the path.
+		/// </summary>
+		/// <value>The path.</value>
+		public string Path
+		{
+			get
+			{
+				return m_Path;
+			}
+		}
+
+		/// <summary>
+		/// Gets a value indicating whether this instance is valid.
+		/// </summary>
+		/// <value><c>true</c> if this instance is valid; otherwise, <c>false</c>.</value>
+		public bool IsValid
+		{
+			get
+			{
+				return m_IsValid;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+
+			m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
+			if(m_Path == null)
+			{
+				m_Path = "";
+			}
+
+			try
+			{
+				m_Path = Helper.ResolvePath(m_Path);
+			}
+			catch(ArgumentException)
+			{
+				Kernel.Instance.Log.Write(LogType.Warning, "Could not find prebuild file for processing: {0}", m_Path);
+				m_IsValid = false;
+			}
+		}
+
+		#endregion
+	}
 }

File diff suppressed because it is too large
+ 516 - 486
Prebuild/src/Core/Nodes/ProjectNode.cs


+ 109 - 109
Prebuild/src/Core/Nodes/ReferenceNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,104 +32,104 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Reference")]
-    public class ReferenceNode : DataNode, IComparable
-    {
-        #region Fields
-
-        private string m_Name = "unknown";
-        private string m_Path;
-        private string m_LocalCopy;
-        private string m_Version;
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return m_Name;
-            }
-        }
-
-        /// <summary>
-        /// Gets the path.
-        /// </summary>
-        /// <value>The path.</value>
-        public string Path
-        {
-            get
-            {
-                return m_Path;
-            }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether [local copy specified].
-        /// </summary>
-        /// <value><c>true</c> if [local copy specified]; otherwise, <c>false</c>.</value>
-        public bool LocalCopySpecified
-        {
-            get
-            {
-                return ( m_LocalCopy != null && m_LocalCopy.Length == 0);
-            }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether [local copy].
-        /// </summary>
-        /// <value><c>true</c> if [local copy]; otherwise, <c>false</c>.</value>
-        public bool LocalCopy
-        {
-            get
-            {
-                if( m_LocalCopy == null)
-                {
-                    return false;
-                }
-                return bool.Parse(m_LocalCopy);
-            }
-        }
-
-        /// <summary>
-        /// Gets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        public string Version
-        {
-            get
-            {
-                return m_Version;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            m_Name = Helper.AttributeValue(node, "name", m_Name);
-            m_Path = Helper.AttributeValue(node, "path", m_Path);
-            m_LocalCopy = Helper.AttributeValue(node, "localCopy", m_LocalCopy);
-            m_Version = Helper.AttributeValue(node, "version", m_Version);
-        }
-
-        #endregion
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Reference")]
+	public class ReferenceNode : DataNode, IComparable
+	{
+		#region Fields
+
+		private string m_Name = "unknown";
+		private string m_Path;
+		private string m_LocalCopy;
+		private string m_Version;
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return m_Name;
+			}
+		}
+
+		/// <summary>
+		/// Gets the path.
+		/// </summary>
+		/// <value>The path.</value>
+		public string Path
+		{
+			get
+			{
+				return m_Path;
+			}
+		}
+
+		/// <summary>
+		/// Gets a value indicating whether [local copy specified].
+		/// </summary>
+		/// <value><c>true</c> if [local copy specified]; otherwise, <c>false</c>.</value>
+		public bool LocalCopySpecified 
+		{
+			get 
+			{
+				return ( m_LocalCopy != null && m_LocalCopy.Length == 0);
+			}
+		}
+
+		/// <summary>
+		/// Gets a value indicating whether [local copy].
+		/// </summary>
+		/// <value><c>true</c> if [local copy]; otherwise, <c>false</c>.</value>
+		public bool LocalCopy
+		{
+			get
+			{
+				if( m_LocalCopy == null)
+				{
+					return false;
+				}
+				return bool.Parse(m_LocalCopy);
+			}
+		}
+
+		/// <summary>
+		/// Gets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		public string Version
+		{
+			get
+			{
+				return m_Version;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			m_Name = Helper.AttributeValue(node, "name", m_Name);
+			m_Path = Helper.AttributeValue(node, "path", m_Path);
+			m_LocalCopy = Helper.AttributeValue(node, "localCopy", m_LocalCopy);
+			m_Version = Helper.AttributeValue(node, "version", m_Version);
+		}
+
+		#endregion
 
         #region IComparable Members
 
@@ -140,5 +140,5 @@ namespace Prebuild.Core.Nodes
         }
 
         #endregion
-    }
+	}
 }

+ 62 - 62
Prebuild/src/Core/Nodes/ReferencePathNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -32,57 +32,57 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("ReferencePath")]
-    public class ReferencePathNode : DataNode, IComparable
-    {
-        #region Fields
-
-        private string m_Path;
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the path.
-        /// </summary>
-        /// <value>The path.</value>
-        public string Path
-        {
-            get
-            {
-                return m_Path;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
-            if(m_Path == null)
-            {
-                m_Path = "";
-            }
-
-            m_Path = m_Path.Trim();
-        }
-
-        #endregion
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("ReferencePath")]
+	public class ReferencePathNode : DataNode, IComparable
+	{
+		#region Fields
+
+		private string m_Path;
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the path.
+		/// </summary>
+		/// <value>The path.</value>
+		public string Path
+		{
+			get
+			{
+				return m_Path;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+
+			m_Path = Helper.InterpolateForEnvironmentVariables(node.InnerText);
+			if(m_Path == null)
+			{
+				m_Path = "";
+			}
+
+			m_Path = m_Path.Trim();
+		}
+
+		#endregion
 
         #region IComparable Members
 
@@ -93,5 +93,5 @@ namespace Prebuild.Core.Nodes
         }
 
         #endregion
-    }
+	}
 }

+ 258 - 258
Prebuild/src/Core/Nodes/SolutionNode.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -34,35 +34,35 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Nodes
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [DataNode("Solution")]
+	/// <summary>
+	/// 
+	/// </summary>
+	[DataNode("Solution")]
     [DataNode("EmbeddedSolution")]
     [DebuggerDisplay("{Name}")]
-    public class SolutionNode : DataNode
-    {
-        #region Fields
+	public class SolutionNode : DataNode
+	{
+		#region Fields
 
         private Guid m_Guid = Guid.NewGuid();
-        private string m_Name = "unknown";
-        private string m_Path = "";
-        private string m_FullPath = "";
-        private string m_ActiveConfig;
+		private string m_Name = "unknown";
+		private string m_Path = "";
+		private string m_FullPath = "";
+		private string m_ActiveConfig;
         private string m_Version = "1.0.0";
-
-        private OptionsNode m_Options;
-        private FilesNode m_Files;
+        
+		private OptionsNode m_Options;
+		private FilesNode m_Files;
         private readonly ConfigurationNodeCollection m_Configurations = new ConfigurationNodeCollection();
         private readonly Dictionary<string, ProjectNode> m_Projects = new Dictionary<string, ProjectNode>();
         private readonly Dictionary<string, DatabaseProjectNode> m_DatabaseProjects = new Dictionary<string, DatabaseProjectNode>();
         private readonly List<ProjectNode> m_ProjectsOrder = new List<ProjectNode>();
         private readonly Dictionary<string, SolutionNode> m_Solutions = new Dictionary<string, SolutionNode>();
-        private CleanupNode m_Cleanup;
+	    private CleanupNode m_Cleanup;
 
-        #endregion
+	    #endregion
 
-        #region Properties
+		#region Properties
         public override IDataNode Parent
         {
             get
@@ -84,142 +84,142 @@ namespace Prebuild.Core.Nodes
             }
         }
 
-        public CleanupNode Cleanup
-        {
-            get
-            {
-                return m_Cleanup;
-            }
+	    public CleanupNode Cleanup
+	    {
+	        get
+	        {
+	            return m_Cleanup;
+	        }
             set
             {
                 m_Cleanup = value;
             }
-        }
+	    }
 
         public Guid Guid
         {
-            get
-            {
-                return m_Guid;
+            get 
+            { 
+                return m_Guid; 
             }
             set
             {
-                m_Guid = value;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the active config.
-        /// </summary>
-        /// <value>The active config.</value>
-        public string ActiveConfig
-        {
-            get
-            {
-                return m_ActiveConfig;
-            }
-            set
-            {
-                m_ActiveConfig = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return m_Name;
-            }
-        }
-
-        /// <summary>
-        /// Gets the path.
-        /// </summary>
-        /// <value>The path.</value>
-        public string Path
-        {
-            get
-            {
-                return m_Path;
-            }
-        }
-
-        /// <summary>
-        /// Gets the full path.
-        /// </summary>
-        /// <value>The full path.</value>
-        public string FullPath
-        {
-            get
-            {
-                return m_FullPath;
-            }
-        }
-
-        /// <summary>
-        /// Gets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        public string Version
-        {
-            get
-            {
-                return m_Version;
-            }
-        }
-
-        /// <summary>
-        /// Gets the options.
-        /// </summary>
-        /// <value>The options.</value>
-        public OptionsNode Options
-        {
-            get
-            {
-                return m_Options;
-            }
-        }
-
-        /// <summary>
-        /// Gets the files.
-        /// </summary>
-        /// <value>The files.</value>
-        public FilesNode Files
-        {
-            get
-            {
-                return m_Files;
-            }
-        }
-
-        /// <summary>
-        /// Gets the configurations.
-        /// </summary>
-        /// <value>The configurations.</value>
-        public ConfigurationNodeCollection Configurations
-        {
-            get
-            {
-                ConfigurationNodeCollection tmp = new ConfigurationNodeCollection();
-                tmp.AddRange(ConfigurationsTable);
-                return tmp;
-            }
-        }
-
-        /// <summary>
-        /// Gets the configurations table.
-        /// </summary>
-        /// <value>The configurations table.</value>
-        public ConfigurationNodeCollection ConfigurationsTable
-        {
-            get
-            {
-                return m_Configurations;
+                m_Guid = value; 
             }
         }
+		/// <summary>
+		/// Gets or sets the active config.
+		/// </summary>
+		/// <value>The active config.</value>
+		public string ActiveConfig 
+		{ 
+			get 
+			{ 
+				return m_ActiveConfig; 
+			} 
+			set 
+			{ 
+				m_ActiveConfig = value; 
+			} 
+		}
+
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name 
+		{
+			get 
+			{
+				return m_Name;
+			}
+		}
+
+		/// <summary>
+		/// Gets the path.
+		/// </summary>
+		/// <value>The path.</value>
+		public string Path 
+		{
+			get 
+			{
+				return m_Path;
+			}
+		}
+
+		/// <summary>
+		/// Gets the full path.
+		/// </summary>
+		/// <value>The full path.</value>
+		public string FullPath
+		{
+			get
+			{
+				return m_FullPath;
+			}
+		}
+
+		/// <summary>
+		/// Gets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		public string Version 
+		{
+			get 
+			{
+				return m_Version;
+			}
+		}
+
+		/// <summary>
+		/// Gets the options.
+		/// </summary>
+		/// <value>The options.</value>
+		public OptionsNode Options
+		{
+			get
+			{
+				return m_Options;
+			}
+		}
+
+		/// <summary>
+		/// Gets the files.
+		/// </summary>
+		/// <value>The files.</value>
+		public FilesNode Files
+		{
+			get
+			{
+				return m_Files;
+			}
+		}
+
+		/// <summary>
+		/// Gets the configurations.
+		/// </summary>
+		/// <value>The configurations.</value>
+		public ConfigurationNodeCollection Configurations
+		{
+			get
+			{
+				ConfigurationNodeCollection tmp = new ConfigurationNodeCollection();
+				tmp.AddRange(ConfigurationsTable);
+				return tmp;
+			}
+		}
+
+		/// <summary>
+		/// Gets the configurations table.
+		/// </summary>
+		/// <value>The configurations table.</value>
+		public ConfigurationNodeCollection ConfigurationsTable
+		{
+			get
+			{
+				return m_Configurations;
+			}
+		}
         /// <summary>
         /// Gets the database projects.
         /// </summary>
@@ -250,106 +250,106 @@ namespace Prebuild.Core.Nodes
                 return m_Solutions;
             }
         }
-        /// <summary>
-        /// Gets the projects.
-        /// </summary>
-        /// <value>The projects.</value>
-        public ICollection<ProjectNode> Projects
-        {
-            get
-            {
+		/// <summary>
+		/// Gets the projects.
+		/// </summary>
+		/// <value>The projects.</value>
+		public ICollection<ProjectNode> Projects
+		{
+			get
+			{
                 List<ProjectNode> tmp = new List<ProjectNode>(m_Projects.Values);
                 tmp.Sort();
                 return tmp;
-            }
-        }
-
-        /// <summary>
-        /// Gets the projects table.
-        /// </summary>
-        /// <value>The projects table.</value>
-        public Dictionary<string, ProjectNode> ProjectsTable
-        {
-            get
-            {
-                return m_Projects;
-            }
-        }
-
-        /// <summary>
-        /// Gets the projects table.
-        /// </summary>
-        /// <value>The projects table.</value>
-        public List<ProjectNode> ProjectsTableOrder
-        {
-            get
-            {
-                return m_ProjectsOrder;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Parses the specified node.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        public override void Parse(XmlNode node)
-        {
-            m_Name = Helper.AttributeValue(node, "name", m_Name);
-            m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig);
-            m_Path = Helper.AttributeValue(node, "path", m_Path);
-            m_Version = Helper.AttributeValue(node, "version", m_Version);
-
-            m_FullPath = m_Path;
-            try
-            {
-                m_FullPath = Helper.ResolvePath(m_FullPath);
-            }
-            catch
-            {
-                throw new WarningException("Could not resolve solution path: {0}", m_Path);
-            }
-
-            Kernel.Instance.CurrentWorkingDirectory.Push();
-            try
-            {
-                Helper.SetCurrentDir(m_FullPath);
-
-                if( node == null )
-                {
-                    throw new ArgumentNullException("node");
-                }
-
-                foreach(XmlNode child in node.ChildNodes)
-                {
-                    IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
-                    if(dataNode is OptionsNode)
-                    {
-                        m_Options = (OptionsNode)dataNode;
-                    }
-                    else if(dataNode is FilesNode)
-                    {
-                        m_Files = (FilesNode)dataNode;
-                    }
-                    else if(dataNode is ConfigurationNode)
-                    {
-                        ConfigurationNode configurationNode = (ConfigurationNode) dataNode;
-                        m_Configurations[configurationNode.NameAndPlatform] = configurationNode;
-
-                        // If the active configuration is null, then we populate it.
-                        if (ActiveConfig == null)
-                        {
-                            ActiveConfig = configurationNode.Name;
-                        }
-                    }
-                    else if(dataNode is ProjectNode)
-                    {
-                        m_Projects[((ProjectNode)dataNode).Name] = (ProjectNode) dataNode;
-                        m_ProjectsOrder.Add((ProjectNode)dataNode);
-                    }
+			}
+		}
+
+		/// <summary>
+		/// Gets the projects table.
+		/// </summary>
+		/// <value>The projects table.</value>
+		public Dictionary<string, ProjectNode> ProjectsTable
+		{
+			get
+			{
+				return m_Projects;
+			}
+		}
+
+		/// <summary>
+		/// Gets the projects table.
+		/// </summary>
+		/// <value>The projects table.</value>
+		public List<ProjectNode> ProjectsTableOrder
+		{
+			get
+			{
+				return m_ProjectsOrder;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Parses the specified node.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		public override void Parse(XmlNode node)
+		{
+			m_Name = Helper.AttributeValue(node, "name", m_Name);
+			m_ActiveConfig = Helper.AttributeValue(node, "activeConfig", m_ActiveConfig);
+			m_Path = Helper.AttributeValue(node, "path", m_Path);
+			m_Version = Helper.AttributeValue(node, "version", m_Version);
+
+			m_FullPath = m_Path;
+			try
+			{
+				m_FullPath = Helper.ResolvePath(m_FullPath);
+			}
+			catch
+			{
+				throw new WarningException("Could not resolve solution path: {0}", m_Path);
+			}
+
+			Kernel.Instance.CurrentWorkingDirectory.Push();
+			try
+			{
+				Helper.SetCurrentDir(m_FullPath);
+
+				if( node == null )
+				{
+					throw new ArgumentNullException("node");
+				}
+
+				foreach(XmlNode child in node.ChildNodes)
+				{
+					IDataNode dataNode = Kernel.Instance.ParseNode(child, this);
+					if(dataNode is OptionsNode)
+					{
+						m_Options = (OptionsNode)dataNode;
+					}
+					else if(dataNode is FilesNode)
+					{
+						m_Files = (FilesNode)dataNode;
+					}
+					else if(dataNode is ConfigurationNode)
+					{
+						ConfigurationNode configurationNode = (ConfigurationNode) dataNode;
+						m_Configurations[configurationNode.NameAndPlatform] = configurationNode;
+
+						// If the active configuration is null, then we populate it.
+						if (ActiveConfig == null)
+						{
+							ActiveConfig = configurationNode.Name;
+						}
+					}
+					else if(dataNode is ProjectNode)
+					{
+						m_Projects[((ProjectNode)dataNode).Name] = (ProjectNode) dataNode;
+						m_ProjectsOrder.Add((ProjectNode)dataNode);
+					}
                     else if(dataNode is SolutionNode)
                     {
                         m_Solutions[((SolutionNode)dataNode).Name] = (SolutionNode) dataNode;
@@ -369,14 +369,14 @@ namespace Prebuild.Core.Nodes
                             throw new WarningException("There can only be one Cleanup node.");
                         m_Cleanup = (CleanupNode)dataNode;
                     }
-                }
-            }
-            finally
-            {
-                Kernel.Instance.CurrentWorkingDirectory.Pop();
-            }
-        }
-
-        #endregion
-    }
+				}
+			}
+			finally
+			{
+				Kernel.Instance.CurrentWorkingDirectory.Pop();
+			}
+		}
+
+		#endregion
+	}
 }

+ 134 - 134
Prebuild/src/Core/Parse/IfContext.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -27,128 +27,128 @@ using System;
 
 namespace Prebuild.Core.Parse
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public enum IfState
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        None,
-        /// <summary>
-        ///
-        /// </summary>
-        If,
-        /// <summary>
-        ///
-        /// </summary>
-        ElseIf,
-        /// <summary>
-        ///
-        /// </summary>
-        Else
-    }
-
-    /// <summary>
-    /// Summary description for IfContext.
-    /// </summary>
-    // Inspired by the equivalent WiX class (see www.sourceforge.net/projects/wix/)
-    public class IfContext
-    {
-        #region Properties
-
-        bool m_Active;
-        bool m_Keep;
-        bool m_EverKept;
-        IfState m_State = IfState.None;
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="IfContext"/> class.
-        /// </summary>
-        /// <param name="active">if set to <c>true</c> [active].</param>
-        /// <param name="keep">if set to <c>true</c> [keep].</param>
-        /// <param name="state">The state.</param>
-        public IfContext(bool active, bool keep, IfState state)
-        {
-            m_Active = active;
-            m_Keep = keep;
-            m_EverKept = keep;
-            m_State = state;
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets or sets a value indicating whether this <see cref="IfContext"/> is active.
-        /// </summary>
-        /// <value><c>true</c> if active; otherwise, <c>false</c>.</value>
-        public bool Active
-        {
-            get
-            {
-                return m_Active;
-            }
-            set
-            {
-                m_Active = value;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets a value indicating whether this <see cref="IfContext"/> is keep.
-        /// </summary>
-        /// <value><c>true</c> if keep; otherwise, <c>false</c>.</value>
-        public bool Keep
-        {
-            get
-            {
-                return m_Keep;
-            }
-            set
-            {
-                m_Keep = value;
-                if(m_Keep)
-                {
-                    m_EverKept = true;
-                }
-            }
-        }
-
-        /// <summary>
-        /// Gets a value indicating whether [ever kept].
-        /// </summary>
-        /// <value><c>true</c> if [ever kept]; otherwise, <c>false</c>.</value>
-        public bool EverKept
-        {
-            get
-            {
-                return m_EverKept;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the state.
-        /// </summary>
-        /// <value>The state.</value>
-        public IfState State
-        {
-            get
-            {
-                return m_State;
-            }
-            set
-            {
-                m_State = value;
-            }
-        }
-
-        #endregion
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	public enum IfState
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		None,
+		/// <summary>
+		/// 
+		/// </summary>
+		If,
+		/// <summary>
+		/// 
+		/// </summary>
+		ElseIf,
+		/// <summary>
+		/// 
+		/// </summary>
+		Else
+	}
+
+	/// <summary>
+	/// Summary description for IfContext.
+	/// </summary>
+	// Inspired by the equivalent WiX class (see www.sourceforge.net/projects/wix/)
+	public class IfContext
+	{
+		#region Properties
+
+		bool m_Active;
+		bool m_Keep;
+		bool m_EverKept;
+		IfState m_State = IfState.None;
+
+		#endregion
+
+		#region Constructors
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="IfContext"/> class.
+		/// </summary>
+		/// <param name="active">if set to <c>true</c> [active].</param>
+		/// <param name="keep">if set to <c>true</c> [keep].</param>
+		/// <param name="state">The state.</param>
+		public IfContext(bool active, bool keep, IfState state)
+		{
+			m_Active = active;
+			m_Keep = keep;
+			m_EverKept = keep;
+			m_State = state;
+		}
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets or sets a value indicating whether this <see cref="IfContext"/> is active.
+		/// </summary>
+		/// <value><c>true</c> if active; otherwise, <c>false</c>.</value>
+		public bool Active
+		{
+			get
+			{
+				return m_Active;
+			}
+			set
+			{
+				m_Active = value;
+			}
+		}
+
+		/// <summary>
+		/// Gets or sets a value indicating whether this <see cref="IfContext"/> is keep.
+		/// </summary>
+		/// <value><c>true</c> if keep; otherwise, <c>false</c>.</value>
+		public bool Keep
+		{
+			get
+			{
+				return m_Keep;
+			}
+			set
+			{
+				m_Keep = value;
+				if(m_Keep)
+				{
+					m_EverKept = true;
+				}
+			}
+		}
+
+		/// <summary>
+		/// Gets a value indicating whether [ever kept].
+		/// </summary>
+		/// <value><c>true</c> if [ever kept]; otherwise, <c>false</c>.</value>
+		public bool EverKept
+		{
+			get
+			{
+				return m_EverKept;
+			}
+		}
+
+		/// <summary>
+		/// Gets or sets the state.
+		/// </summary>
+		/// <value>The state.</value>
+		public IfState State
+		{
+			get
+			{
+				return m_State;
+			}
+			set
+			{
+				m_State = value;
+			}
+		}
+
+		#endregion
+	}
 }

+ 544 - 544
Prebuild/src/Core/Parse/Preprocessor.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -31,336 +31,336 @@ using System.Xml;
 
 namespace Prebuild.Core.Parse
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public enum OperatorSymbol
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        None,
-        /// <summary>
-        ///
-        /// </summary>
-        Equal,
-        /// <summary>
-        ///
-        /// </summary>
-        NotEqual,
-        /// <summary>
-        ///
-        /// </summary>
-        LessThan,
-        /// <summary>
-        ///
-        /// </summary>
-        GreaterThan,
-        /// <summary>
-        ///
-        /// </summary>
-        LessThanEqual,
-        /// <summary>
-        ///
-        /// </summary>
-        GreaterThanEqual
-    }
-
-    /// <summary>
-    ///
-    /// </summary>
-    public class Preprocessor
-    {
-        #region Constants
-
-        /// <summary>
-        /// Includes the regex to look for file tags in the <?include
-        /// ?> processing instruction.
-        /// </summary>
-        private static readonly Regex includeFileRegex = new Regex("file=\"(.+?)\"");
-
-        #endregion
-
-        #region Fields
-
-        readonly XmlDocument m_OutDoc = new XmlDocument();
-        readonly Stack<IfContext> m_IfStack = new Stack<IfContext>();
-        readonly Dictionary<string, object> m_Variables = new Dictionary<string, object>();
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="Preprocessor"/> class.
-        /// </summary>
-        public Preprocessor()
-        {
-            RegisterVariable("OS", GetOS());
-            RegisterVariable("RuntimeVersion", Environment.Version.Major);
-            RegisterVariable("RuntimeMajor", Environment.Version.Major);
-            RegisterVariable("RuntimeMinor", Environment.Version.Minor);
-            RegisterVariable("RuntimeRevision", Environment.Version.Revision);
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the processed doc.
-        /// </summary>
-        /// <value>The processed doc.</value>
-        public XmlDocument ProcessedDoc
-        {
-            get
-            {
-                return m_OutDoc;
-            }
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        /// <summary>
-        /// Parts of this code were taken from NAnt and is subject to the GPL
-        /// as per NAnt's license. Thanks to the NAnt guys for this little gem.
-        /// </summary>
-        /// <returns></returns>
-        public static string GetOS()
-        {
-            PlatformID platId = Environment.OSVersion.Platform;
-            if(platId == PlatformID.Win32NT || platId == PlatformID.Win32Windows)
-            {
-                return "Win32";
-            }
-
-            if (File.Exists("/System/Library/Frameworks/Cocoa.framework/Cocoa"))
-            {
-                return "MACOSX";
-            }
-
-            /*
-             * .NET 1.x, under Mono, the UNIX code is 128. Under
-             * .NET 2.x, Mono or MS, the UNIX code is 4
-             */
-            if(Environment.Version.Major == 1)
-            {
-                if((int)platId == 128)
-                {
-                    return "UNIX";
-                }
-            }
-            else if((int)platId == 4)
-            {
-                return "UNIX";
-            }
-
-            return "Unknown";
-        }
-
-        private static bool CompareNum(OperatorSymbol oper, int val1, int val2)
-        {
-            switch(oper)
-            {
-                case OperatorSymbol.Equal:
-                    return (val1 == val2);
-                case OperatorSymbol.NotEqual:
-                    return (val1 != val2);
-                case OperatorSymbol.LessThan:
-                    return (val1 < val2);
-                case OperatorSymbol.LessThanEqual:
-                    return (val1 <= val2);
-                case OperatorSymbol.GreaterThan:
-                    return (val1 > val2);
-                case OperatorSymbol.GreaterThanEqual:
-                    return (val1 >= val2);
-            }
-
-            throw new WarningException("Unknown operator type");
-        }
-
-        private static bool CompareStr(OperatorSymbol oper, string val1, string val2)
-        {
-            switch(oper)
-            {
-                case OperatorSymbol.Equal:
-                    return (val1 == val2);
-                case OperatorSymbol.NotEqual:
-                    return (val1 != val2);
-                case OperatorSymbol.LessThan:
-                    return (val1.CompareTo(val2) < 0);
-                case OperatorSymbol.LessThanEqual:
-                    return (val1.CompareTo(val2) <= 0);
-                case OperatorSymbol.GreaterThan:
-                    return (val1.CompareTo(val2) > 0);
-                case OperatorSymbol.GreaterThanEqual:
-                    return (val1.CompareTo(val2) >= 0);
-            }
-
-            throw new WarningException("Unknown operator type");
-        }
-
-        private static char NextChar(int idx, string str)
-        {
-            if((idx + 1) >= str.Length)
-            {
-                return Char.MaxValue;
-            }
-
-            return str[idx + 1];
-        }
-        // Very very simple expression parser. Can only match expressions of the form
-        // <var> <op> <value>:
-        // OS = Windows
-        // OS != Linux
-        // RuntimeMinor > 0
-        private bool ParseExpression(string exp)
-        {
-            if(exp == null)
-            {
-                throw new ArgumentException("Invalid expression, cannot be null");
-            }
-
-            exp = exp.Trim();
-            if(exp.Length < 1)
-            {
-                throw new ArgumentException("Invalid expression, cannot be 0 length");
-            }
-
-            string id = "";
-            string str = "";
-            OperatorSymbol oper = OperatorSymbol.None;
-            bool inStr = false;
-
-            for(int i = 0; i < exp.Length; i++)
-            {
-                char c = exp[i];
-                if(Char.IsWhiteSpace(c))
-                {
-                    continue;
-                }
-
-                if(Char.IsLetterOrDigit(c) || c == '_')
-                {
-                    if(inStr)
-                    {
-                        str += c;
-                    }
-                    else
-                    {
-                        id += c;
-                    }
-                }
-                else if(c == '\"')
-                {
-                    inStr = !inStr;
-                    if(inStr)
-                    {
-                        str = "";
-                    }
-                }
-                else
-                {
-                    if(inStr)
-                    {
-                        str += c;
-                    }
-                    else
-                    {
-                        switch(c)
-                        {
-                            case '=':
-                                oper = OperatorSymbol.Equal;
-                                break;
-
-                            case '!':
-                                if(NextChar(i, exp) == '=')
-                                {
-                                    oper = OperatorSymbol.NotEqual;
-                                }
-
-                                break;
-
-                            case '<':
-                                if(NextChar(i, exp) == '=')
-                                {
-                                    oper = OperatorSymbol.LessThanEqual;
-                                }
-                                else
-                                {
-                                    oper = OperatorSymbol.LessThan;
-                                }
-
-                                break;
-
-                            case '>':
-                                if(NextChar(i, exp) == '=')
-                                {
-                                    oper = OperatorSymbol.GreaterThanEqual;
-                                }
-                                else
-                                {
-                                    oper = OperatorSymbol.GreaterThan;
-                                }
-
-                                break;
-                        }
-                    }
-                }
-            }
-
-
-            if(inStr)
-            {
-                throw new WarningException("Expected end of string in expression");
-            }
-
-            if(oper == OperatorSymbol.None)
-            {
-                throw new WarningException("Expected operator in expression");
-            }
-            if(id.Length < 1)
-            {
-                throw new WarningException("Expected identifier in expression");
-            }
-            if(str.Length < 1)
-            {
-                throw new WarningException("Expected value in expression");
-            }
-
-            bool ret;
-            try
-            {
-                object val = m_Variables[id.ToLower()];
-                if(val == null)
-                {
-                    throw new WarningException("Unknown identifier '{0}'", id);
-                }
-
-                Type t = val.GetType();
-                if(t.IsAssignableFrom(typeof(int)))
-                {
-                    int numVal = (int)val;
-                    int numVal2 = Int32.Parse(str);
-                    ret = CompareNum(oper, numVal, numVal2);
-                }
-                else
-                {
-                    string strVal = val.ToString();
-                    string strVal2 = str;
-                    ret = CompareStr(oper, strVal, strVal2);
-                }
-            }
-            catch(ArgumentException ex)
-            {
-                ex.ToString();
-                throw new WarningException("Invalid value type for system variable '{0}', expected int", id);
-            }
-
-            return ret;
-        }
+	/// <summary>
+	/// 
+	/// </summary>
+	public enum OperatorSymbol
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		None,
+		/// <summary>
+		/// 
+		/// </summary>
+		Equal,
+		/// <summary>
+		/// 
+		/// </summary>
+		NotEqual,
+		/// <summary>
+		/// 
+		/// </summary>
+		LessThan,
+		/// <summary>
+		/// 
+		/// </summary>
+		GreaterThan,
+		/// <summary>
+		/// 
+		/// </summary>
+		LessThanEqual,
+		/// <summary>
+		/// 
+		/// </summary>
+		GreaterThanEqual
+	}
+
+	/// <summary>
+	/// 
+	/// </summary>
+	public class Preprocessor
+	{
+		#region Constants
+
+		/// <summary>
+		/// Includes the regex to look for file tags in the <?include
+		/// ?> processing instruction.
+		/// </summary>
+		private static readonly Regex includeFileRegex = new Regex("file=\"(.+?)\"");
+
+		#endregion
+
+		#region Fields
+
+	    readonly XmlDocument m_OutDoc = new XmlDocument();
+	    readonly Stack<IfContext> m_IfStack = new Stack<IfContext>();
+	    readonly Dictionary<string, object> m_Variables = new Dictionary<string, object>();
+
+		#endregion
+
+		#region Constructors
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="Preprocessor"/> class.
+		/// </summary>
+		public Preprocessor()
+		{
+			RegisterVariable("OS", GetOS());
+			RegisterVariable("RuntimeVersion", Environment.Version.Major);
+			RegisterVariable("RuntimeMajor", Environment.Version.Major);
+			RegisterVariable("RuntimeMinor", Environment.Version.Minor);
+			RegisterVariable("RuntimeRevision", Environment.Version.Revision);
+		}
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the processed doc.
+		/// </summary>
+		/// <value>The processed doc.</value>
+		public XmlDocument ProcessedDoc
+		{
+			get
+			{
+				return m_OutDoc;
+			}
+		}
+
+		#endregion
+
+		#region Private Methods
+		 
+		/// <summary>
+		/// Parts of this code were taken from NAnt and is subject to the GPL
+		/// as per NAnt's license. Thanks to the NAnt guys for this little gem.
+		/// </summary>
+		/// <returns></returns>
+		public static string GetOS()
+		{
+			PlatformID platId = Environment.OSVersion.Platform;
+			if(platId == PlatformID.Win32NT || platId == PlatformID.Win32Windows)
+			{
+				return "Win32";
+			}
+
+			if (File.Exists("/System/Library/Frameworks/Cocoa.framework/Cocoa"))
+			{
+				return "MACOSX";
+			}
+
+			/*
+			 * .NET 1.x, under Mono, the UNIX code is 128. Under
+			 * .NET 2.x, Mono or MS, the UNIX code is 4
+			 */
+			if(Environment.Version.Major == 1)
+			{
+				if((int)platId == 128)
+				{
+					return "UNIX";
+				}
+			}
+			else if((int)platId == 4)
+			{
+				return "UNIX";
+			}
+
+			return "Unknown";
+		}
+
+		private static bool CompareNum(OperatorSymbol oper, int val1, int val2)
+		{
+			switch(oper)
+			{
+				case OperatorSymbol.Equal:
+					return (val1 == val2);
+				case OperatorSymbol.NotEqual:
+					return (val1 != val2);
+				case OperatorSymbol.LessThan:
+					return (val1 < val2);
+				case OperatorSymbol.LessThanEqual:
+					return (val1 <= val2);
+				case OperatorSymbol.GreaterThan:
+					return (val1 > val2);
+				case OperatorSymbol.GreaterThanEqual:
+					return (val1 >= val2);
+			}
+
+			throw new WarningException("Unknown operator type");
+		}
+
+		private static bool CompareStr(OperatorSymbol oper, string val1, string val2)
+		{
+			switch(oper)
+			{
+				case OperatorSymbol.Equal:
+					return (val1 == val2);
+				case OperatorSymbol.NotEqual:
+					return (val1 != val2);
+				case OperatorSymbol.LessThan:
+					return (val1.CompareTo(val2) < 0);
+				case OperatorSymbol.LessThanEqual:
+					return (val1.CompareTo(val2) <= 0);
+				case OperatorSymbol.GreaterThan:
+					return (val1.CompareTo(val2) > 0);
+				case OperatorSymbol.GreaterThanEqual:
+					return (val1.CompareTo(val2) >= 0);
+			}
+
+			throw new WarningException("Unknown operator type");
+		}
+
+		private static char NextChar(int idx, string str)
+		{
+			if((idx + 1) >= str.Length)
+			{
+				return Char.MaxValue;
+			}
+
+			return str[idx + 1];
+		}
+		// Very very simple expression parser. Can only match expressions of the form
+		// <var> <op> <value>:
+		// OS = Windows
+		// OS != Linux
+		// RuntimeMinor > 0
+		private bool ParseExpression(string exp)
+		{
+			if(exp == null)
+			{
+				throw new ArgumentException("Invalid expression, cannot be null");
+			}
+
+			exp = exp.Trim();
+			if(exp.Length < 1)
+			{
+				throw new ArgumentException("Invalid expression, cannot be 0 length");
+			}
+
+			string id = "";
+			string str = "";
+			OperatorSymbol oper = OperatorSymbol.None;
+			bool inStr = false;
+
+		    for(int i = 0; i < exp.Length; i++)
+			{
+				char c = exp[i];
+				if(Char.IsWhiteSpace(c))
+				{
+					continue;
+				}
+
+				if(Char.IsLetterOrDigit(c) || c == '_')
+				{
+					if(inStr)
+					{
+						str += c;
+					}
+					else
+					{
+						id += c;
+					}
+				}
+				else if(c == '\"')
+				{
+					inStr = !inStr;
+					if(inStr)
+					{
+						str = "";
+					}
+				}
+				else
+				{
+					if(inStr)
+					{
+						str += c;
+					}
+					else
+					{
+						switch(c)
+						{
+							case '=':
+								oper = OperatorSymbol.Equal;
+								break;
+
+							case '!':
+								if(NextChar(i, exp) == '=')
+								{
+									oper = OperatorSymbol.NotEqual;
+								}
+								
+								break;
+
+							case '<':
+								if(NextChar(i, exp) == '=')
+								{
+									oper = OperatorSymbol.LessThanEqual;
+								}
+								else
+								{
+									oper = OperatorSymbol.LessThan;
+								}
+								
+								break;
+
+							case '>':
+								if(NextChar(i, exp) == '=')
+								{
+									oper = OperatorSymbol.GreaterThanEqual;
+								}
+								else
+								{
+									oper = OperatorSymbol.GreaterThan;
+								}
+
+								break;
+						}
+					}
+				}
+			}
+
+			
+			if(inStr)
+			{
+				throw new WarningException("Expected end of string in expression");
+			}
+
+			if(oper == OperatorSymbol.None)
+			{
+				throw new WarningException("Expected operator in expression");
+			}
+		    if(id.Length < 1)
+		    {
+		        throw new WarningException("Expected identifier in expression");
+		    }
+		    if(str.Length < 1)
+		    {
+		        throw new WarningException("Expected value in expression");
+		    }
+
+		    bool ret;
+			try
+			{
+				object val = m_Variables[id.ToLower()];
+				if(val == null)
+				{
+					throw new WarningException("Unknown identifier '{0}'", id);
+				}
+
+			    Type t = val.GetType();
+				if(t.IsAssignableFrom(typeof(int)))
+				{
+					int numVal = (int)val;
+					int numVal2 = Int32.Parse(str);
+					ret = CompareNum(oper, numVal, numVal2);
+				}
+				else
+				{
+					string strVal = val.ToString();
+					string strVal2 = str;
+					ret = CompareStr(oper, strVal, strVal2);
+				}
+			}
+			catch(ArgumentException ex)
+			{
+				ex.ToString();
+				throw new WarningException("Invalid value type for system variable '{0}', expected int", id);
+			}
+
+			return ret;
+		}
 
         /// <summary>
         /// Taken from current Prebuild included in OpenSim 0.7.x
@@ -376,13 +376,13 @@ namespace Prebuild.Core.Parse
             if (!include.Contains ("*")) {
                 return;
             }
-
+            
             // Console.WriteLine("Processing {0}", include);
-
+            
             // Break up the include into pre and post wildcard sections
             string preWildcard = include.Substring (0, include.IndexOf ("*"));
             string postWildcard = include.Substring (include.IndexOf ("*") + 2);
-
+            
             // If preWildcard is a directory, recurse
             if (Directory.Exists (preWildcard)) {
                 string[] directories = Directory.GetDirectories (preWildcard);
@@ -390,7 +390,7 @@ namespace Prebuild.Core.Parse
                 Array.Reverse (directories);
                 foreach (string dirPath in directories) {
                     //Console.WriteLine ("Scanning : {0}", dirPath);
-
+                    
                     string includeFile = Path.Combine (dirPath, postWildcard);
                     if (includeFile.Contains ("*")) {
                         // postWildcard included another wildcard, recurse.
@@ -408,10 +408,10 @@ namespace Prebuild.Core.Parse
                 // preWildcard is not a path to a directory, so the wildcard is in the filename
                 string searchFilename = Path.GetFileName (preWildcard.Substring (preWildcard.IndexOf ("/") + 1) + "*" + postWildcard);
                 Console.WriteLine ("searchFilename: {0}", searchFilename);
-
+                
                 string searchDirectory = Path.GetDirectoryName (preWildcard);
                 Console.WriteLine ("searchDirectory: {0}", searchDirectory);
-
+                
                 string[] files = Directory.GetFiles (searchDirectory, searchFilename);
                 Array.Sort (files);
                 Array.Reverse (files);
@@ -426,227 +426,227 @@ namespace Prebuild.Core.Parse
             }
         }
 
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="variableValue"></param>
-        public void RegisterVariable(string name, object variableValue)
-        {
-            if(name == null || variableValue == null)
-            {
-                return;
-            }
-
-            m_Variables[name.ToLower()] = variableValue;
-        }
-
-        /// <summary>
-        /// Performs validation on the xml source as well as evaluates conditional and flow expresions
-        /// </summary>
-        /// <exception cref="ArgumentException">For invalid use of conditional expressions or for invalid XML syntax.  If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml</exception>
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="name"></param>
+		/// <param name="variableValue"></param>
+		public void RegisterVariable(string name, object variableValue)
+		{
+			if(name == null || variableValue == null)
+			{
+				return;
+			}
+
+			m_Variables[name.ToLower()] = variableValue;
+		}
+
+		/// <summary>
+		/// Performs validation on the xml source as well as evaluates conditional and flow expresions
+		/// </summary>
+		/// <exception cref="ArgumentException">For invalid use of conditional expressions or for invalid XML syntax.  If a XmlValidatingReader is passed, then will also throw exceptions for non-schema-conforming xml</exception>
         /// <param name="initialReader"></param>
-        /// <returns>the output xml </returns>
-        public string Process(XmlReader initialReader)
-        {
-            if(initialReader == null)
-            {
-                throw new ArgumentException("Invalid XML reader to pre-process");
-            }
-
-            IfContext context = new IfContext(true, true, IfState.None);
-            StringWriter xmlText = new StringWriter();
-            XmlTextWriter writer = new XmlTextWriter(xmlText);
-            writer.Formatting = Formatting.Indented;
-
-            // Create a queue of XML readers and add the initial
-            // reader to it. Then we process until we run out of
-            // readers which lets the <?include?> operation add more
-            // readers to generate a multi-file parser and not require
-            // XML fragments that a recursive version would use.
-            Stack<XmlReader> readerStack = new Stack<XmlReader>();
-            readerStack.Push(initialReader);
-
-            while(readerStack.Count > 0)
-            {
-                // Pop off the next reader.
-                XmlReader reader = readerStack.Pop();
-
-                // Process through this XML reader until it is
-                // completed (or it is replaced by the include
-                // operation).
-                while(reader.Read())
-                {
-                    // The prebuild file has a series of processing
-                    // instructions which allow for specific
-                    // inclusions based on operating system or to
-                    // include additional files.
-                    if(reader.NodeType == XmlNodeType.ProcessingInstruction)
-                    {
-                        bool ignore = false;
-
-                        switch(reader.LocalName)
-                        {
-                            case "include":
-                                // use regular expressions to parse out the attributes.
-                                MatchCollection matches = includeFileRegex.Matches(reader.Value);
-
-                                // make sure there is only one file attribute.
-                                if(matches.Count > 1)
-                                {
-                                    throw new WarningException("An <?include ?> node was found, but it specified more than one file.");
-                                }
-
-                                if(matches.Count == 0)
-                                {
-                                    throw new WarningException("An <?include ?> node was found, but it did not specify the file attribute.");
-                                }
+		/// <returns>the output xml </returns>
+		public string Process(XmlReader initialReader)
+		{
+			if(initialReader == null)
+			{
+				throw new ArgumentException("Invalid XML reader to pre-process");
+			}
+
+			IfContext context = new IfContext(true, true, IfState.None);
+			StringWriter xmlText = new StringWriter();
+			XmlTextWriter writer = new XmlTextWriter(xmlText);
+			writer.Formatting = Formatting.Indented;
+
+			// Create a queue of XML readers and add the initial
+			// reader to it. Then we process until we run out of
+			// readers which lets the <?include?> operation add more
+			// readers to generate a multi-file parser and not require
+			// XML fragments that a recursive version would use.
+			Stack<XmlReader> readerStack = new Stack<XmlReader>();
+			readerStack.Push(initialReader);
+			
+			while(readerStack.Count > 0)
+			{
+				// Pop off the next reader.
+				XmlReader reader = readerStack.Pop();
+
+				// Process through this XML reader until it is
+				// completed (or it is replaced by the include
+				// operation).
+				while(reader.Read())
+				{
+					// The prebuild file has a series of processing
+					// instructions which allow for specific
+					// inclusions based on operating system or to
+					// include additional files.
+					if(reader.NodeType == XmlNodeType.ProcessingInstruction)
+					{
+						bool ignore = false;
+
+						switch(reader.LocalName)
+						{
+							case "include":
+								// use regular expressions to parse out the attributes.
+								MatchCollection matches = includeFileRegex.Matches(reader.Value);
+
+								// make sure there is only one file attribute.
+								if(matches.Count > 1)
+								{
+									throw new WarningException("An <?include ?> node was found, but it specified more than one file.");
+								}
+
+								if(matches.Count == 0)
+								{
+									throw new WarningException("An <?include ?> node was found, but it did not specify the file attribute.");
+								}
 
                                 // ***** Adding for wildcard handling
                                 // Push current reader back onto the stack.
                                 readerStack.Push (reader);
-
+                                
                                 // Pull the file out from the regex and make sure it is a valid file before using it.
                                 string filename = matches[0].Groups[1].Value;
-
+                                
                                 filename = String.Join (Path.DirectorySeparatorChar.ToString (), filename.Split (new char[] { '/', '\\' }));
-
+                                
                                 if (!filename.Contains ("*")) {
-
+                                
                                     FileInfo includeFile = new FileInfo (filename);
                                     if (!includeFile.Exists) {
                                         throw new WarningException ("Cannot include file: " + includeFile.FullName);
                                     }
-
+                                
                                     // Create a new reader object for this file. Then put the old reader back on the stack and start
                                     // processing using this new XML reader.
-
+                                
                                     XmlReader newReader = new XmlTextReader (includeFile.Open (FileMode.Open, FileAccess.Read, FileShare.Read));
                                     reader = newReader;
                                     readerStack.Push (reader);
-
+                                
                                 } else {
                                     WildCardInclude (readerStack, filename);
                                 }
-
+                                
                                 reader = (XmlReader)readerStack.Pop ();
                                 ignore = true;
                                 break;
 
-                            case "if":
-                                m_IfStack.Push(context);
-                                context = new IfContext(context.Keep & context.Active, ParseExpression(reader.Value), IfState.If);
-                                ignore = true;
-                                break;
-
-                            case "elseif":
-                                if(m_IfStack.Count == 0)
-                                {
-                                    throw new WarningException("Unexpected 'elseif' outside of 'if'");
-                                }
-                                if(context.State != IfState.If && context.State != IfState.ElseIf)
-                                {
-                                    throw new WarningException("Unexpected 'elseif' outside of 'if'");
-                                }
-
-                                context.State = IfState.ElseIf;
-                                if(!context.EverKept)
-                                {
-                                    context.Keep = ParseExpression(reader.Value);
-                                }
-                                else
-                                {
-                                    context.Keep = false;
-                                }
-
-                                ignore = true;
-                                break;
-
-                            case "else":
-                                if(m_IfStack.Count == 0)
-                                {
-                                    throw new WarningException("Unexpected 'else' outside of 'if'");
-                                }
-                                if(context.State != IfState.If && context.State != IfState.ElseIf)
-                                {
-                                    throw new WarningException("Unexpected 'else' outside of 'if'");
-                                }
-
-                                context.State = IfState.Else;
-                                context.Keep = !context.EverKept;
-                                ignore = true;
-                                break;
-
-                            case "endif":
-                                if(m_IfStack.Count == 0)
-                                {
-                                    throw new WarningException("Unexpected 'endif' outside of 'if'");
-                                }
-
-                                context = m_IfStack.Pop();
-                                ignore = true;
-                                break;
-                        }
-
-                        if(ignore)
-                        {
-                            continue;
-                        }
-                    }//end pre-proc instruction
-
-                    if(!context.Active || !context.Keep)
-                    {
-                        continue;
-                    }
-
-                    switch(reader.NodeType)
-                    {
-                        case XmlNodeType.Element:
-                            bool empty = reader.IsEmptyElement;
-                            writer.WriteStartElement(reader.Name);
-
-                            while (reader.MoveToNextAttribute())
-                            {
-                                writer.WriteAttributeString(reader.Name, reader.Value);
-                            }
-
-                            if(empty)
-                            {
-                                writer.WriteEndElement();
-                            }
-
-                            break;
-
-                        case XmlNodeType.EndElement:
-                            writer.WriteEndElement();
-                            break;
-
-                        case XmlNodeType.Text:
-                            writer.WriteString(reader.Value);
-                            break;
-
-                        case XmlNodeType.CDATA:
-                            writer.WriteCData(reader.Value);
-                            break;
-
-                        default:
-                            break;
-                    }
-                }
-
-                if(m_IfStack.Count != 0)
-                {
-                    throw new WarningException("Mismatched 'if', 'endif' pair");
-                }
-            }
-
-            return xmlText.ToString();
-        }
-
-        #endregion
-    }
+							case "if":
+								m_IfStack.Push(context);
+								context = new IfContext(context.Keep & context.Active, ParseExpression(reader.Value), IfState.If);
+								ignore = true;
+								break;
+
+							case "elseif":
+								if(m_IfStack.Count == 0)
+								{
+									throw new WarningException("Unexpected 'elseif' outside of 'if'");
+								}
+						        if(context.State != IfState.If && context.State != IfState.ElseIf)
+						        {
+						            throw new WarningException("Unexpected 'elseif' outside of 'if'");
+						        }
+
+						        context.State = IfState.ElseIf;
+								if(!context.EverKept)
+								{
+									context.Keep = ParseExpression(reader.Value);
+								}
+								else
+								{
+									context.Keep = false;
+								}
+
+								ignore = true;
+								break;
+
+							case "else":
+								if(m_IfStack.Count == 0)
+								{
+									throw new WarningException("Unexpected 'else' outside of 'if'");
+								}
+						        if(context.State != IfState.If && context.State != IfState.ElseIf)
+						        {
+						            throw new WarningException("Unexpected 'else' outside of 'if'");
+						        }
+
+						        context.State = IfState.Else;
+								context.Keep = !context.EverKept;
+								ignore = true;
+								break;
+
+							case "endif":
+								if(m_IfStack.Count == 0)
+								{
+									throw new WarningException("Unexpected 'endif' outside of 'if'");
+								}
+
+								context = m_IfStack.Pop();
+								ignore = true;
+								break;
+						}
+
+						if(ignore)
+						{
+							continue;
+						}
+					}//end pre-proc instruction
+
+					if(!context.Active || !context.Keep)
+					{
+						continue;
+					}
+
+					switch(reader.NodeType)
+					{
+						case XmlNodeType.Element:
+							bool empty = reader.IsEmptyElement;
+							writer.WriteStartElement(reader.Name);
+
+							while (reader.MoveToNextAttribute())
+							{
+								writer.WriteAttributeString(reader.Name, reader.Value);
+							}
+
+							if(empty)
+							{
+								writer.WriteEndElement();
+							}
+						
+							break;
+
+						case XmlNodeType.EndElement:
+							writer.WriteEndElement();
+							break;
+
+						case XmlNodeType.Text:
+							writer.WriteString(reader.Value);
+							break;
+
+						case XmlNodeType.CDATA:
+							writer.WriteCData(reader.Value);
+							break;
+
+						default:
+							break;
+					}
+				}
+
+				if(m_IfStack.Count != 0)
+				{
+					throw new WarningException("Mismatched 'if', 'endif' pair");
+				}
+			}
+			
+			return xmlText.ToString();
+		}
+
+		#endregion
+	}
 }

+ 7 - 7
Prebuild/src/Core/Targets/AutotoolsTarget.cs

@@ -51,10 +51,10 @@ POSSIBILITY OF SUCH DAMAGE.
  distribute, sublicense, and/or sell copies of the Software, and to
  permit persons to whom the Software is furnished to do so, subject to
  the following conditions:
-
+ 
  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.
-
+ 
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -156,7 +156,7 @@ namespace Prebuild.Core.Targets
 
 
     /// <summary>
-    ///
+    /// 
     /// </summary>
     [Target("autotools")]
     public class AutotoolsTarget : ITarget
@@ -650,7 +650,7 @@ namespace Prebuild.Core.Targets
                     string tempAssemblyFile = Path.Combine(Path.GetTempPath(), project.Name + "-temp.dll");
                     System.CodeDom.Compiler.CompilerParameters cparam =
                         new System.CodeDom.Compiler.CompilerParameters(args, tempAssemblyFile);
-
+                    
                     System.CodeDom.Compiler.CompilerResults cr =
                         cscp.CompileAssemblyFromFile(cparam, sources);
 
@@ -673,11 +673,11 @@ namespace Prebuild.Core.Targets
                         if (File.Exists(tempAssemblyFile))
                             File.Delete(tempAssemblyFile);
                     }
-                    catch
+                    catch 
                     {
                         Console.WriteLine("Error! '{0}'", e);
                     }
-
+                   
                 }
 
                 // Tell the user if there's a problem copying the file
@@ -977,7 +977,7 @@ namespace Prebuild.Core.Targets
 
             if(autotoolsStream == null) {
 
-              /*
+              /* 
                * try without the default namespace prepended, in
                * case prebuild.exe assembly was compiled with
                * something other than Visual Studio .NET

+ 55 - 55
Prebuild/src/Core/Targets/DebugTarget.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005	Matthew	Holmes ([email protected]),	Dan	Moorehea
 Redistribution and use in source and binary	forms, with	or without modification, are permitted
 provided that the following	conditions are met:
 
-* Redistributions of source	code must retain the above copyright notice, this list of conditions
-  and the following	disclaimer.
-* Redistributions in binary	form must reproduce	the	above copyright	notice,	this list of conditions
-  and the following	disclaimer in the documentation	and/or other materials provided	with the
-  distribution.
-* The name of the author may not be	used to	endorse	or promote products	derived	from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR	``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT	NOT	LIMITED	TO,	THE	IMPLIED	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A	PARTICULAR PURPOSE
+* Redistributions of source	code must retain the above copyright notice, this list of conditions 
+  and the following	disclaimer.	
+* Redistributions in binary	form must reproduce	the	above copyright	notice,	this list of conditions	
+  and the following	disclaimer in the documentation	and/or other materials provided	with the 
+  distribution.	
+* The name of the author may not be	used to	endorse	or promote products	derived	from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR	``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,	
+BUT	NOT	LIMITED	TO,	THE	IMPLIED	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A	PARTICULAR PURPOSE 
 ARE	DISCLAIMED.	IN NO EVENT	SHALL THE AUTHOR BE	LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL	DAMAGES	(INCLUDING,	BUT	NOT	LIMITED	TO,	PROCUREMENT	OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA,	OR PROFITS;	OR BUSINESS	INTERRUPTION) HOWEVER CAUSED AND ON	ANY	THEORY
@@ -41,62 +41,62 @@ using Prebuild.Core.Nodes;
 #if	(DEBUG && _DEBUG_TARGET)
 namespace Prebuild.Core.Targets
 {
-    [Target("debug")]
-    public class DebugTarget : ITarget
-    {
+	[Target("debug")]
+	public class DebugTarget : ITarget
+	{
 #region	Fields
 
-        private	Kernel m_Kernel	= null;
+		private	Kernel m_Kernel	= null;
 
 #endregion
 
 #region	ITarget	Members
 
-        public void	Write()
-        {
-            foreach(SolutionNode s in m_Kernel.Solutions)
-            {
-                Console.WriteLine("Solution	[ {0}, {1} ]", s.Name, s.Path);
-                foreach(string file	in s.Files)
+		public void	Write()
+		{
+			foreach(SolutionNode s in m_Kernel.Solutions)
+			{
+				Console.WriteLine("Solution	[ {0}, {1} ]", s.Name, s.Path);
+				foreach(string file	in s.Files)
 {
-                    Console.WriteLine("\tFile [	{0}	]",	file);
+					Console.WriteLine("\tFile [	{0}	]",	file);
 }
 
-                foreach(ProjectNode	proj in	s.Projects)
-                {
-                    Console.WriteLine("\tProject [ {0},	{1}. {2} ]", proj.Name,	proj.Path, proj.Language);
-                    foreach(string file	in proj.Files)
-                        Console.WriteLine("\t\tFile	[ {0} ]", file);
-                }
-            }
-        }
-
-        public void	Clean()
-        {
-            Console.WriteLine("Not implemented");
-        }
-
-        public string Name
-        {
-            get
-            {
-                return "debug";
-            }
-        }
-
-        public Kernel Kernel
-        {
-            get
-            {
-                return m_Kernel;
-            }
-            set
-            {
-                m_Kernel = value;
-            }
-        }
+				foreach(ProjectNode	proj in	s.Projects)
+				{
+					Console.WriteLine("\tProject [ {0},	{1}. {2} ]", proj.Name,	proj.Path, proj.Language);
+					foreach(string file	in proj.Files)
+						Console.WriteLine("\t\tFile	[ {0} ]", file);
+				}
+			}
+		}
+
+		public void	Clean()
+		{
+			Console.WriteLine("Not implemented");
+		}
+
+		public string Name
+		{
+			get
+			{
+				return "debug";
+			}
+		}
+
+		public Kernel Kernel
+		{
+			get
+			{
+				return m_Kernel;
+			}
+			set
+			{
+				m_Kernel = value;
+			}
+		}
 
 #endregion
-    }
+	}
 }
 #endif

+ 10 - 10
Prebuild/src/Core/Targets/MakefileTarget.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004 Crestez Leonard ([email protected])
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY

+ 482 - 482
Prebuild/src/Core/Targets/MonoDevelopTarget.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004 Matthew Holmes ([email protected]), Dan Moorehead (da
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -35,481 +35,481 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("monodev")]
-    public class MonoDevelopTarget : ITarget
-    {
-        #region Fields
-
-        private Kernel m_Kernel;
-
-        #endregion
-
-        #region Private Methods
-
-        private static string PrependPath(string path)
-        {
-            string tmpPath = Helper.NormalizePath(path, '/');
-            Regex regex = new Regex(@"(\w):/(\w+)");
-            Match match = regex.Match(tmpPath);
-            if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
-            {
-                tmpPath = Helper.NormalizePath(tmpPath);
-            }
-            else
-            {
-                tmpPath = Helper.NormalizePath("./" + tmpPath);
-            }
-
-            return tmpPath;
-        }
-
-        private static string BuildReference(SolutionNode solution, ReferenceNode refr)
-        {
-            string ret = "<ProjectReference type=\"";
-            if(solution.ProjectsTable.ContainsKey(refr.Name))
-            {
-                ret += "Project\"";
-                ret += " localcopy=\"" + refr.LocalCopy.ToString() +  "\" refto=\"" + refr.Name + "\" />";
-            }
-            else
-            {
-                ProjectNode project = (ProjectNode)refr.Parent;
-                string fileRef = FindFileReference(refr.Name, project);
-
-                if(refr.Path != null || fileRef != null)
-                {
-                    ret += "Assembly\" refto=\"";
-
-                    string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
-
-                    ret += finalPath;
-                    ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
-                    return ret;
-                }
-
-                ret += "Gac\"";
-                ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\"";
-                ret += " refto=\"";
-                try
-                {
-                    /*
-                    Day changed to 28 Mar 2007
-                    ...
-                    08:09 < cj> is there anything that replaces Assembly.LoadFromPartialName() ?
-                    08:09 < jonp> no
-                    08:10 < jonp> in their infinite wisdom [sic], microsoft decided that the
-                                  ability to load any assembly version by-name was an inherently
-                                  bad idea
-                    08:11 < cj> I'm thinking of a bunch of four-letter words right now...
-                    08:11 < cj> security through making it difficult for the developer!!!
-                    08:12 < jonp> just use the Obsolete API
-                    08:12 < jonp> it should still work
-                    08:12 < cj> alrighty.
-                    08:12 < jonp> you just get warnings when using it
-                    */
-                    Assembly assem = Assembly.LoadWithPartialName(refr.Name);
-                    ret += assem.FullName;
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("monodev")]
+	public class MonoDevelopTarget : ITarget
+	{
+		#region Fields
+
+		private Kernel m_Kernel;
+
+		#endregion
+
+		#region Private Methods
+
+		private static string PrependPath(string path)
+		{
+			string tmpPath = Helper.NormalizePath(path, '/');
+			Regex regex = new Regex(@"(\w):/(\w+)");
+			Match match = regex.Match(tmpPath);
+			if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
+			{
+				tmpPath = Helper.NormalizePath(tmpPath);
+			}
+			else
+			{
+				tmpPath = Helper.NormalizePath("./" + tmpPath);
+			}
+
+			return tmpPath;
+		}
+
+		private static string BuildReference(SolutionNode solution, ReferenceNode refr)
+		{
+			string ret = "<ProjectReference type=\"";
+			if(solution.ProjectsTable.ContainsKey(refr.Name))
+			{
+				ret += "Project\"";
+				ret += " localcopy=\"" + refr.LocalCopy.ToString() +  "\" refto=\"" + refr.Name + "\" />";
+			}
+			else
+			{
+				ProjectNode project = (ProjectNode)refr.Parent;
+				string fileRef = FindFileReference(refr.Name, project);
+
+				if(refr.Path != null || fileRef != null)
+				{
+					ret += "Assembly\" refto=\"";
+
+					string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
+
+					ret += finalPath;
+					ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
+					return ret;
+				}
+
+				ret += "Gac\"";
+				ret += " localcopy=\"" + refr.LocalCopy.ToString() + "\"";
+				ret += " refto=\"";
+				try
+				{
+					/*
+					Day changed to 28 Mar 2007
+					...
+					08:09 < cj> is there anything that replaces Assembly.LoadFromPartialName() ?
+					08:09 < jonp> no
+					08:10 < jonp> in their infinite wisdom [sic], microsoft decided that the 
+					              ability to load any assembly version by-name was an inherently 
+					              bad idea
+					08:11 < cj> I'm thinking of a bunch of four-letter words right now...
+					08:11 < cj> security through making it difficult for the developer!!!
+					08:12 < jonp> just use the Obsolete API
+					08:12 < jonp> it should still work
+					08:12 < cj> alrighty.
+					08:12 < jonp> you just get warnings when using it
+					*/
+					Assembly assem = Assembly.LoadWithPartialName(refr.Name);
+					ret += assem.FullName;
                     //ret += refr.Name;
-                }
-                catch (System.NullReferenceException e)
-                {
-                    e.ToString();
-                    ret += refr.Name;
-                }
-                ret += "\" />";
-            }
-
-            return ret;
-        }
-
-        private static string FindFileReference(string refName, ProjectNode project)
-        {
-            foreach(ReferencePathNode refPath in project.ReferencePaths)
-            {
-                string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
-
-                if(File.Exists(fullPath))
-                {
-                    return fullPath;
-                }
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Gets the XML doc file.
-        /// </summary>
-        /// <param name="project">The project.</param>
-        /// <param name="conf">The conf.</param>
-        /// <returns></returns>
-        public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
-        {
-            if( conf == null )
-            {
-                throw new ArgumentNullException("conf");
-            }
-            if( project == null )
-            {
-                throw new ArgumentNullException("project");
-            }
-            string docFile = (string)conf.Options["XmlDocFile"];
-            if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
-            {
-                return "False";
-            }
-            return "True";
-        }
-
-        private void WriteProject(SolutionNode solution, ProjectNode project)
-        {
-            string csComp = "Mcs";
-            string netRuntime = "Mono";
-            if(project.Runtime == ClrRuntime.Microsoft)
-            {
-                csComp = "Csc";
-                netRuntime = "MsNet";
-            }
-
-            string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
-            StreamWriter ss = new StreamWriter(projFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
-
-            using(ss)
-            {
-                ss.WriteLine(
-                    "<Project name=\"{0}\" description=\"\" standardNamespace=\"{1}\" newfilesearch=\"None\" enableviewstate=\"True\" fileversion=\"2.0\" language=\"C#\" clr-version=\"Net_2_0\" ctype=\"DotNetProject\">",
-                    project.Name,
-                    project.RootNamespace
-                    );
-
-                                int count = 0;
-
-                ss.WriteLine("  <Configurations active=\"{0}\">", solution.ActiveConfig);
-
-                foreach(ConfigurationNode conf in project.Configurations)
-                {
-                    ss.WriteLine("    <Configuration name=\"{0}\" ctype=\"DotNetProjectConfiguration\">", conf.Name);
-                    ss.Write("      <Output");
-                    ss.Write(" directory=\"{0}\"", Helper.EndPath(Helper.NormalizePath(".\\" + conf.Options["OutputPath"].ToString())));
-                    ss.Write(" assembly=\"{0}\"", project.AssemblyName);
-                    ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
-                    //ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
-                    //ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
-                    if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
-                    {
-                        ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
-                    }
-                    else
-                    {
-                        ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
-                    }
-                    if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
-                    {
-                        ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
-                    }
-                    else
-                    {
-                        ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
-                    }
-                    ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
-                    ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
-                    ss.WriteLine(" />");
-
-                    ss.Write("      <Build");
-                    ss.Write(" debugmode=\"True\"");
-                    if (project.Type == ProjectType.WinExe)
-                    {
-                        ss.Write(" target=\"{0}\"", ProjectType.Exe.ToString());
-                    }
-                    else
-                    {
-                        ss.Write(" target=\"{0}\"", project.Type);
-                    }
-                    ss.WriteLine(" />");
-
-                    ss.Write("      <Execution");
-                    ss.Write(" runwithwarnings=\"{0}\"", !conf.Options.WarningsAsErrors);
-                    ss.Write(" consolepause=\"True\"");
-                    ss.Write(" runtime=\"{0}\"", netRuntime);
+				}
+				catch (System.NullReferenceException e)
+				{
+					e.ToString();
+					ret += refr.Name;
+				}
+				ret += "\" />";
+			}
+
+			return ret;
+		}
+
+		private static string FindFileReference(string refName, ProjectNode project) 
+		{
+			foreach(ReferencePathNode refPath in project.ReferencePaths) 
+			{
+				string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
+
+				if(File.Exists(fullPath)) 
+				{
+					return fullPath;
+				}
+			}
+
+			return null;
+		}
+
+		/// <summary>
+		/// Gets the XML doc file.
+		/// </summary>
+		/// <param name="project">The project.</param>
+		/// <param name="conf">The conf.</param>
+		/// <returns></returns>
+		public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf) 
+		{
+			if( conf == null )
+			{
+				throw new ArgumentNullException("conf");
+			}
+			if( project == null )
+			{
+				throw new ArgumentNullException("project");
+			}
+			string docFile = (string)conf.Options["XmlDocFile"];
+			if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
+			{
+				return "False";
+			}
+			return "True";
+		}
+
+		private void WriteProject(SolutionNode solution, ProjectNode project)
+		{
+			string csComp = "Mcs";
+			string netRuntime = "Mono";
+			if(project.Runtime == ClrRuntime.Microsoft)
+			{
+				csComp = "Csc";
+				netRuntime = "MsNet";
+			}
+
+			string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
+			StreamWriter ss = new StreamWriter(projFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
+
+			using(ss)
+			{
+				ss.WriteLine(
+					"<Project name=\"{0}\" description=\"\" standardNamespace=\"{1}\" newfilesearch=\"None\" enableviewstate=\"True\" fileversion=\"2.0\" language=\"C#\" clr-version=\"Net_2_0\" ctype=\"DotNetProject\">",
+					project.Name,
+					project.RootNamespace
+					);
+				
+								int count = 0;
+				
+				ss.WriteLine("  <Configurations active=\"{0}\">", solution.ActiveConfig);
+
+				foreach(ConfigurationNode conf in project.Configurations)
+				{
+					ss.WriteLine("    <Configuration name=\"{0}\" ctype=\"DotNetProjectConfiguration\">", conf.Name);
+					ss.Write("      <Output");
+					ss.Write(" directory=\"{0}\"", Helper.EndPath(Helper.NormalizePath(".\\" + conf.Options["OutputPath"].ToString())));
+					ss.Write(" assembly=\"{0}\"", project.AssemblyName);
+					ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
+					//ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
+					//ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
+					if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
+					{
+						ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
+					}
+					else
+					{
+						ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
+					}
+					if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
+					{
+						ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
+					}
+					else
+					{
+						ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
+					}
+					ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
+					ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
+					ss.WriteLine(" />");
+					
+					ss.Write("      <Build");
+					ss.Write(" debugmode=\"True\"");
+					if (project.Type == ProjectType.WinExe)
+					{
+						ss.Write(" target=\"{0}\"", ProjectType.Exe.ToString());
+					}
+					else
+					{
+						ss.Write(" target=\"{0}\"", project.Type);
+					}
+					ss.WriteLine(" />");
+					
+					ss.Write("      <Execution");
+					ss.Write(" runwithwarnings=\"{0}\"", !conf.Options.WarningsAsErrors);
+					ss.Write(" consolepause=\"True\"");
+					ss.Write(" runtime=\"{0}\"", netRuntime);
                     ss.Write(" clr-version=\"Net_2_0\"");
-                    ss.WriteLine(" />");
-
-                    ss.Write("      <CodeGeneration");
-                    ss.Write(" compiler=\"{0}\"", csComp);
-                    ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
-                    ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
-                    ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
-                    ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
-                    ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
-                    ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
-                    ss.Write(" mainclass=\"{0}\"", project.StartupObject);
-                    ss.Write(" target=\"{0}\"", project.Type);
-                    ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
-                    ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
-                    ss.Write(" win32Icon=\"{0}\"", project.AppIcon);
-                    ss.Write(" ctype=\"CSharpCompilerParameters\"");
-                    ss.WriteLine(" />");
-                    ss.WriteLine("    </Configuration>");
-
-                    count++;
-                }
-                ss.WriteLine("  </Configurations>");
-
-                ss.Write("  <DeploymentInformation");
-                ss.Write(" target=\"\"");
-                ss.Write(" script=\"\"");
-                ss.Write(" strategy=\"File\"");
-                ss.WriteLine(">");
-                ss.WriteLine("    <excludeFiles />");
-                ss.WriteLine("  </DeploymentInformation>");
-
-                ss.WriteLine("  <Contents>");
-                foreach(string file in project.Files)
-                {
-                     string buildAction;
-                    string dependson = "";
-                    string resource_id = "";
-                    string copyToOutput = "";
-
-                    switch(project.Files.GetBuildAction(file))
-                    {
-                        case BuildAction.None:
-                            buildAction = "Nothing";
-                            break;
-
-                        case BuildAction.Content:
-                            buildAction = "Exclude";
-                            break;
-
-                        case BuildAction.EmbeddedResource:
-                            buildAction = "EmbedAsResource";
-                            break;
-
-                        default:
-                            buildAction = "Compile";
-                            break;
-                    }
+					ss.WriteLine(" />");
+					
+					ss.Write("      <CodeGeneration");
+					ss.Write(" compiler=\"{0}\"", csComp);
+					ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
+					ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
+					ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
+					ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
+					ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
+					ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
+					ss.Write(" mainclass=\"{0}\"", project.StartupObject);
+					ss.Write(" target=\"{0}\"", project.Type);
+					ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
+					ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
+					ss.Write(" win32Icon=\"{0}\"", project.AppIcon);
+					ss.Write(" ctype=\"CSharpCompilerParameters\"");
+					ss.WriteLine(" />");
+					ss.WriteLine("    </Configuration>");
+
+					count++;
+				}                
+				ss.WriteLine("  </Configurations>");
+
+				ss.Write("  <DeploymentInformation");
+				ss.Write(" target=\"\"");
+				ss.Write(" script=\"\"");
+				ss.Write(" strategy=\"File\"");
+				ss.WriteLine(">");
+				ss.WriteLine("    <excludeFiles />");
+				ss.WriteLine("  </DeploymentInformation>");
+				
+				ss.WriteLine("  <Contents>");
+				foreach(string file in project.Files)
+				{
+ 					string buildAction;
+					string dependson = "";
+					string resource_id = "";
+					string copyToOutput = "";
+					
+					switch(project.Files.GetBuildAction(file))
+					{
+						case BuildAction.None:
+							buildAction = "Nothing";
+							break;
+
+						case BuildAction.Content:
+							buildAction = "Exclude";
+							break;
+
+						case BuildAction.EmbeddedResource:
+							buildAction = "EmbedAsResource";
+							break;
+
+						default:
+							buildAction = "Compile";
+							break;
+					}
 
                     if (project.Files.GetCopyToOutput(file) != CopyToOutput.Never)
-                            buildAction = "FileCopy";
-
-                    // Sort of a hack, we try and resolve the path and make it relative, if we can.
-                    string extension = Path.GetExtension(file);
-                    string designer_format = string.Format(".Designer{0}", extension);
-
-                    if (file.EndsWith(designer_format))
-                    {
-                        string basename = file.Substring(0, file.LastIndexOf(designer_format));
-                        string[] extensions = new string[] { ".cs", ".resx", ".settings" };
-
-                        foreach(string ext in extensions)
-                        {
-                            if (project.Files.Contains(basename + ext))
-                            {
-                                dependson = string.Format(" dependson=\"{0}{1}\"", basename, ext);
-                                break;
-                            }
-                        }
-                    }
-                    if (extension == ".resx")
-                    {
-                        buildAction = "EmbedAsResource";
-                        string basename = file.Substring(0, file.LastIndexOf(".resx"));
-
-                        // Visual Studio type resx + form dependency
-                        if (project.Files.Contains(basename + ".cs"))
-                        {
-                            dependson = string.Format(" dependson=\"{0}{1}\"", basename, ".cs");
-                        }
-
-                        // We need to specify a resources file name to avoid MissingManifestResourceExceptions
-                        // in libraries that are built.
-                        resource_id = string.Format(" resource_id=\"{0}.{1}.resources\"",
-                                project.AssemblyName, basename.Replace("/", "."));
-                    }
-
-                    switch(project.Files.GetCopyToOutput(file))
-                    {
-                        case CopyToOutput.Always:
-                            copyToOutput = string.Format(" copyToOutputDirectory=\"Always\"");
-                            break;
-                        case CopyToOutput.PreserveNewest:
-                            copyToOutput = string.Format(" copyToOutputDirectory=\"PreserveNewest\"");
-                            break;
-                    }
-
-                     // Sort of a hack, we try and resolve the path and make it relative, if we can.
-                     string filePath = PrependPath(file);
-                    ss.WriteLine("    <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\"{2}{3}{4} />",
-                                 filePath, buildAction, dependson, resource_id, copyToOutput);
-                }
-                ss.WriteLine("  </Contents>");
-
-                ss.WriteLine("  <References>");
-                foreach(ReferenceNode refr in project.References)
-                {
-                    ss.WriteLine("    {0}", BuildReference(solution, refr));
-                }
-                ss.WriteLine("  </References>");
-
-
-                ss.WriteLine("</Project>");
-            }
-
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void WriteCombine(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Creating MonoDevelop combine and project files");
-            foreach(ProjectNode project in solution.Projects)
-            {
-                if(m_Kernel.AllowProject(project.FilterGroups))
-                {
-                    m_Kernel.Log.Write("...Creating project: {0}", project.Name);
-                    WriteProject(solution, project);
-                }
-            }
-
-            m_Kernel.Log.Write("");
-            string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
-            StreamWriter ss = new StreamWriter(combFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
-
+						    buildAction = "FileCopy";
+
+					// Sort of a hack, we try and resolve the path and make it relative, if we can.
+					string extension = Path.GetExtension(file);
+					string designer_format = string.Format(".Designer{0}", extension);
+
+					if (file.EndsWith(designer_format))
+					{
+						string basename = file.Substring(0, file.LastIndexOf(designer_format));
+						string[] extensions = new string[] { ".cs", ".resx", ".settings" };
+
+						foreach(string ext in extensions)
+						{
+							if (project.Files.Contains(basename + ext))
+							{
+								dependson = string.Format(" dependson=\"{0}{1}\"", basename, ext);
+								break;
+							}
+						}
+					}
+					if (extension == ".resx")
+					{
+						buildAction = "EmbedAsResource";
+						string basename = file.Substring(0, file.LastIndexOf(".resx"));						
+						
+						// Visual Studio type resx + form dependency
+						if (project.Files.Contains(basename + ".cs"))
+						{
+							dependson = string.Format(" dependson=\"{0}{1}\"", basename, ".cs");
+						}
+
+						// We need to specify a resources file name to avoid MissingManifestResourceExceptions
+						// in libraries that are built.
+						resource_id = string.Format(" resource_id=\"{0}.{1}.resources\"",
+								project.AssemblyName, basename.Replace("/", "."));
+					}
+
+					switch(project.Files.GetCopyToOutput(file))
+					{
+						case CopyToOutput.Always:
+							copyToOutput = string.Format(" copyToOutputDirectory=\"Always\"");
+							break;
+						case CopyToOutput.PreserveNewest:
+							copyToOutput = string.Format(" copyToOutputDirectory=\"PreserveNewest\"");
+							break;
+					}
+					
+ 					// Sort of a hack, we try and resolve the path and make it relative, if we can.
+ 					string filePath = PrependPath(file);
+					ss.WriteLine("    <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\"{2}{3}{4} />", 
+					             filePath, buildAction, dependson, resource_id, copyToOutput);
+				}
+				ss.WriteLine("  </Contents>");
+
+				ss.WriteLine("  <References>");
+				foreach(ReferenceNode refr in project.References)
+				{
+					ss.WriteLine("    {0}", BuildReference(solution, refr));
+				}
+				ss.WriteLine("  </References>");
+
+
+				ss.WriteLine("</Project>");
+			}
+
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void WriteCombine(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Creating MonoDevelop combine and project files");
+			foreach(ProjectNode project in solution.Projects)
+			{
+				if(m_Kernel.AllowProject(project.FilterGroups)) 
+				{
+					m_Kernel.Log.Write("...Creating project: {0}", project.Name);
+					WriteProject(solution, project);
+				}
+			}
+
+			m_Kernel.Log.Write("");
+			string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
+			StreamWriter ss = new StreamWriter(combFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
+            
             int count = 0;
-
-            using(ss)
-            {
-                ss.WriteLine("<Combine name=\"{0}\" fileversion=\"2.0\" description=\"\">", solution.Name);
-
-                count = 0;
-                foreach(ConfigurationNode conf in solution.Configurations)
-                {
-                    if(count == 0)
-                    {
-                        ss.WriteLine("  <Configurations active=\"{0}\">", conf.Name);
-                    }
-
-                    ss.WriteLine("    <Configuration name=\"{0}\" ctype=\"CombineConfiguration\">", conf.Name);
-                    foreach(ProjectNode project in solution.Projects)
-                    {
-                        ss.WriteLine("      <Entry configuration=\"{1}\" build=\"True\" name=\"{0}\" />", project.Name, conf.Name);
-                    }
-                    ss.WriteLine("    </Configuration>");
-
-                    count++;
-                }
-                ss.WriteLine("  </Configurations>");
-
-                count = 0;
-
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    if(count == 0)
-                        ss.WriteLine("  <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
-
-                    ss.WriteLine("    <Execute type=\"None\" entry=\"{0}\" />", project.Name);
-                    count++;
-                }
-                ss.WriteLine("  </StartMode>");
-
-                ss.WriteLine("  <Entries>");
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
-                    ss.WriteLine("    <Entry filename=\"{0}\" />",
-                        Helper.MakeFilePath(path, project.Name, "mdp"));
-                }
-                ss.WriteLine("  </Entries>");
-
-                ss.WriteLine("</Combine>");
-            }
-
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void CleanProject(ProjectNode project)
-        {
-            m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
-            Helper.DeleteIfExists(projectFile);
-        }
-
-        private void CleanSolution(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Cleaning MonoDevelop combine and project files for", solution.Name);
-
-            string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
-            Helper.DeleteIfExists(slnFile);
-
-            foreach(ProjectNode project in solution.Projects)
-            {
-                CleanProject(project);
-            }
-
-            m_Kernel.Log.Write("");
-        }
-
-        #endregion
-
-        #region ITarget Members
-
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public void Write(Kernel kern)
-        {
-            if( kern == null )
-            {
-                throw new ArgumentNullException("kern");
-            }
-            m_Kernel = kern;
-            foreach(SolutionNode solution in kern.Solutions)
-            {
-                WriteCombine(solution);
-            }
-            m_Kernel = null;
-        }
-
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public virtual void Clean(Kernel kern)
-        {
-            if( kern == null )
-            {
-                throw new ArgumentNullException("kern");
-            }
-            m_Kernel = kern;
-            foreach(SolutionNode sol in kern.Solutions)
-            {
-                CleanSolution(sol);
-            }
-            m_Kernel = null;
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return "sharpdev";
-            }
-        }
-
-        #endregion
-    }
+            
+			using(ss)
+			{
+				ss.WriteLine("<Combine name=\"{0}\" fileversion=\"2.0\" description=\"\">", solution.Name);
+
+				count = 0;
+				foreach(ConfigurationNode conf in solution.Configurations)
+				{
+					if(count == 0)
+					{
+						ss.WriteLine("  <Configurations active=\"{0}\">", conf.Name);
+					}
+
+					ss.WriteLine("    <Configuration name=\"{0}\" ctype=\"CombineConfiguration\">", conf.Name);
+					foreach(ProjectNode project in solution.Projects)
+					{
+						ss.WriteLine("      <Entry configuration=\"{1}\" build=\"True\" name=\"{0}\" />", project.Name, conf.Name);
+					}
+					ss.WriteLine("    </Configuration>");
+
+					count++;
+				}
+				ss.WriteLine("  </Configurations>");
+				
+				count = 0;
+				
+				foreach(ProjectNode project in solution.Projects)
+				{                    
+					if(count == 0)
+						ss.WriteLine("  <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
+
+					ss.WriteLine("    <Execute type=\"None\" entry=\"{0}\" />", project.Name);
+					count++;
+				}
+				ss.WriteLine("  </StartMode>");
+				
+				ss.WriteLine("  <Entries>");
+				foreach(ProjectNode project in solution.Projects)
+				{
+					string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
+					ss.WriteLine("    <Entry filename=\"{0}\" />",
+						Helper.MakeFilePath(path, project.Name, "mdp"));
+				}
+				ss.WriteLine("  </Entries>");
+				
+				ss.WriteLine("</Combine>");
+			}
+
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void CleanProject(ProjectNode project)
+		{
+			m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "mdp");
+			Helper.DeleteIfExists(projectFile);
+		}
+
+		private void CleanSolution(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Cleaning MonoDevelop combine and project files for", solution.Name);
+
+			string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "mds");
+			Helper.DeleteIfExists(slnFile);
+
+			foreach(ProjectNode project in solution.Projects)
+			{
+				CleanProject(project);
+			}
+            
+			m_Kernel.Log.Write("");
+		}
+
+		#endregion
+
+		#region ITarget Members
+
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public void Write(Kernel kern)
+		{
+			if( kern == null )
+			{
+				throw new ArgumentNullException("kern");
+			}
+			m_Kernel = kern;
+			foreach(SolutionNode solution in kern.Solutions)
+			{
+				WriteCombine(solution);
+			}
+			m_Kernel = null;
+		}
+
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public virtual void Clean(Kernel kern)
+		{
+			if( kern == null )
+			{
+				throw new ArgumentNullException("kern");
+			}
+			m_Kernel = kern;
+			foreach(SolutionNode sol in kern.Solutions)
+			{
+				CleanSolution(sol);
+			}
+			m_Kernel = null;
+		}
+
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return "sharpdev";
+			}
+		}
+
+		#endregion
+	}
 }

+ 398 - 373
Prebuild/src/Core/Targets/NAntTarget.cs

@@ -47,36 +47,36 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("nant")]
-    public class NAntTarget : ITarget
-    {
-        #region Fields
-
-        private Kernel m_Kernel;
-
-        #endregion
-
-        #region Private Methods
-
-        private static string PrependPath(string path)
-        {
-            string tmpPath = Helper.NormalizePath(path, '/');
-            Regex regex = new Regex(@"(\w):/(\w+)");
-            Match match = regex.Match(tmpPath);
-            //if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
-            //{
-            tmpPath = Helper.NormalizePath(tmpPath);
-            //}
-            //			else
-            //			{
-            //				tmpPath = Helper.NormalizePath("./" + tmpPath);
-            //			}
-
-            return tmpPath;
-        }
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("nant")]
+	public class NAntTarget : ITarget
+	{
+		#region Fields
+
+		private Kernel m_Kernel;
+
+		#endregion
+
+		#region Private Methods
+
+		private static string PrependPath(string path)
+		{
+			string tmpPath = Helper.NormalizePath(path, '/');
+			Regex regex = new Regex(@"(\w):/(\w+)");
+			Match match = regex.Match(tmpPath);
+			//if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
+			//{
+			tmpPath = Helper.NormalizePath(tmpPath);
+			//}
+			//			else
+			//			{
+			//				tmpPath = Helper.NormalizePath("./" + tmpPath);
+			//			}
+
+			return tmpPath;
+		}
 
         private static string BuildReference(SolutionNode solution, ProjectNode currentProject, ReferenceNode refr)
         {
@@ -85,7 +85,7 @@ namespace Prebuild.Core.Targets
             {
                 return refr.Path;
             }
-
+            
             if (solution.ProjectsTable.ContainsKey(refr.Name))
             {
                 ProjectNode projectRef = (ProjectNode) solution.ProjectsTable[refr.Name];
@@ -113,7 +113,7 @@ namespace Prebuild.Core.Targets
             return refr.Name + ".dll";
         }
 
-        public static string GetRefFileName(string refName)
+	    public static string GetRefFileName(string refName)
         {
             if (ExtensionSpecified(refName))
             {
@@ -140,11 +140,11 @@ namespace Prebuild.Core.Targets
             return extension;
         }
 
-        private static string FindFileReference(string refName, ProjectNode project)
-        {
-            foreach (ReferencePathNode refPath in project.ReferencePaths)
-            {
-                string fullPath = Helper.MakeFilePath(refPath.Path, refName);
+		private static string FindFileReference(string refName, ProjectNode project)
+		{
+			foreach (ReferencePathNode refPath in project.ReferencePaths)
+			{
+			    string fullPath = Helper.MakeFilePath(refPath.Path, refName);
 
                 if (File.Exists(fullPath))
                 {
@@ -153,10 +153,10 @@ namespace Prebuild.Core.Targets
 
                 fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
 
-                if (File.Exists(fullPath))
-                {
-                    return fullPath;
-                }
+				if (File.Exists(fullPath))
+				{
+					return fullPath;
+				}
 
                 fullPath = Helper.MakeFilePath(refPath.Path, refName, "exe");
 
@@ -164,162 +164,205 @@ namespace Prebuild.Core.Targets
                 {
                     return fullPath;
                 }
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Gets the XML doc file.
-        /// </summary>
-        /// <param name="project">The project.</param>
-        /// <param name="conf">The conf.</param>
-        /// <returns></returns>
-        public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
-        {
-            if (conf == null)
-            {
-                throw new ArgumentNullException("conf");
-            }
-            if (project == null)
-            {
-                throw new ArgumentNullException("project");
-            }
-            string docFile = (string)conf.Options["XmlDocFile"];
-            //			if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
-            //			{
-            //				return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
-            //			}
-            return docFile;
-        }
-
-        private void WriteProject(SolutionNode solution, ProjectNode project)
-        {
+			}
+
+			return null;
+		}
+
+		/// <summary>
+		/// Gets the XML doc file.
+		/// </summary>
+		/// <param name="project">The project.</param>
+		/// <param name="conf">The conf.</param>
+		/// <returns></returns>
+		public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
+		{
+			if (conf == null)
+			{
+				throw new ArgumentNullException("conf");
+			}
+			if (project == null)
+			{
+				throw new ArgumentNullException("project");
+			}
+			string docFile = (string)conf.Options["XmlDocFile"];
+			//			if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
+			//			{
+			//				return Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
+			//			}
+			return docFile;
+		}
+
+		private void WriteProject(SolutionNode solution, ProjectNode project)
+		{
             string projFile = Helper.MakeFilePath(project.FullPath, project.Name + GetProjectExtension(project), "build");
-            StreamWriter ss = new StreamWriter(projFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
-            bool hasDoc = false;
-
-            using (ss)
-            {
-                ss.WriteLine("<?xml version=\"1.0\" ?>");
-                ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
-                ss.WriteLine("	  <target name=\"{0}\">", "build");
-                ss.WriteLine("		  <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
-                ss.WriteLine("		  <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
-
-                ss.Write("		  <csc ");
-                ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
-                ss.Write(" debug=\"{0}\"", "${build.debug}");
-                ss.Write(" platform=\"${build.platform}\"");
-
-
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    if (conf.Options.KeyFile != "")
-                    {
-                        ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
-                        break;
-                    }
-                }
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
-                    break;
-                }
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    ss.Write(" warnaserror=\"{0}\"", conf.Options.WarningsAsErrors);
-                    break;
-                }
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
-                    break;
-                }
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
-                    break;
-                }
-
-                ss.Write(" main=\"{0}\"", project.StartupObject);
-
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    if (GetXmlDocFile(project, conf) != "")
-                    {
-                        ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
-                        hasDoc = true;
-                    }
-                    break;
-                }
-                ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
-                if (project.Type == ProjectType.Library)
-                {
-                    ss.Write(".dll\"");
-                }
-                else
-                {
-                    ss.Write(".exe\"");
-                }
-                if (project.AppIcon != null && project.AppIcon.Length != 0)
-                {
-                    ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
-                }
+			StreamWriter ss = new StreamWriter(projFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
+			bool hasDoc = false;
+
+			using (ss)
+			{
+				ss.WriteLine("<?xml version=\"1.0\" ?>");
+				ss.WriteLine("<project name=\"{0}\" default=\"build\">", project.Name);
+				ss.WriteLine("	  <target name=\"{0}\">", "build");
+				ss.WriteLine("		  <echo message=\"Build Directory is ${project::get-base-directory()}/${build.dir}\" />");
+				ss.WriteLine("		  <mkdir dir=\"${project::get-base-directory()}/${build.dir}\" />");
+				ss.WriteLine("		  <copy todir=\"${project::get-base-directory()}/${build.dir}\" flatten=\"true\">");
+				ss.WriteLine("			  <fileset basedir=\"${project::get-base-directory()}\">");
+				foreach (ReferenceNode refr in project.References)
+				{
+					if (refr.LocalCopy)
+					{
+						ss.WriteLine("				  <include name=\"{0}", Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)) + "\" />", '/'));
+					}
+				}
+				
+				ss.WriteLine("			  </fileset>");
+				ss.WriteLine("		  </copy>");
+				if (project.ConfigFile != null && project.ConfigFile.Length!=0)
+				{
+					ss.Write("		  <copy file=\"" + project.ConfigFile + "\" tofile=\"${project::get-base-directory()}/${build.dir}/${project::get-name()}");
+
+					if (project.Type == ProjectType.Library)
+					{
+						ss.Write(".dll.config\"");
+					}
+					else
+					{
+						ss.Write(".exe.config\"");
+					}
+					ss.WriteLine(" />");
+				}
+
+				// Add the content files to just be copied
+				ss.WriteLine("		  {0}", "<copy todir=\"${project::get-base-directory()}/${build.dir}\">");
+				ss.WriteLine("			  {0}", "<fileset basedir=\".\">");
+				
+				foreach (string file in project.Files)
+				{
+					// Ignore if we aren't content
+					if (project.Files.GetBuildAction(file) != BuildAction.Content)
+							continue;
+
+					// Create a include tag
+					ss.WriteLine("				  {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
+				}
+
+				ss.WriteLine("			  {0}", "</fileset>");
+				ss.WriteLine("		  {0}", "</copy>");
+
+				ss.Write("		  <csc ");
+				ss.Write(" target=\"{0}\"", project.Type.ToString().ToLower());
+				ss.Write(" debug=\"{0}\"", "${build.debug}");
+				ss.Write(" platform=\"${build.platform}\"");
+
+
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					if (conf.Options.KeyFile != "")
+					{
+						ss.Write(" keyfile=\"{0}\"", conf.Options.KeyFile);
+						break;
+					}
+				}
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					ss.Write(" unsafe=\"{0}\"", conf.Options.AllowUnsafe);
+					break;
+				}
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					ss.Write(" warnaserror=\"{0}\"", conf.Options.WarningsAsErrors);
+					break;
+				}
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					ss.Write(" define=\"{0}\"", conf.Options.CompilerDefines);
+					break;
+				}
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
+					break;
+				}
+
+				ss.Write(" main=\"{0}\"", project.StartupObject);
+
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					if (GetXmlDocFile(project, conf) != "")
+					{
+						ss.Write(" doc=\"{0}\"", "${project::get-base-directory()}/${build.dir}/" + GetXmlDocFile(project, conf));
+						hasDoc = true;
+					}
+					break;
+				}
+				ss.Write(" output=\"{0}", "${project::get-base-directory()}/${build.dir}/${project::get-name()}");
+				if (project.Type == ProjectType.Library)
+				{
+					ss.Write(".dll\"");
+				}
+				else
+				{
+					ss.Write(".exe\"");
+				}
+				if (project.AppIcon != null && project.AppIcon.Length != 0)
+				{
+					ss.Write(" win32icon=\"{0}\"", Helper.NormalizePath(project.AppIcon, '/'));
+				}
                 // This disables a very different behavior between VS and NAnt.  With Nant,
                 //    If you have using System.Xml;  it will ensure System.Xml.dll is referenced,
                 //    but not in VS.  This will force the behaviors to match, so when it works
                 //    in nant, it will work in VS.
                 ss.Write(" noconfig=\"true\"");
                 ss.WriteLine(">");
-                ss.WriteLine("			  <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
-                foreach (string file in project.Files)
-                {
-                    switch (project.Files.GetBuildAction(file))
-                    {
-                        case BuildAction.EmbeddedResource:
-                            ss.WriteLine("				  {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
-                            break;
-                        default:
-                            if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
-                            {
-                                ss.WriteLine("				  <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
-                            }
-                            break;
-                    }
-                }
-                //if (project.Files.GetSubType(file).ToString() != "Code")
-                //{
-                //	ps.WriteLine("	  <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
-
-                ss.WriteLine("			  </resources>");
-                ss.WriteLine("			  <sources failonempty=\"true\">");
-                foreach (string file in project.Files)
-                {
-                    switch (project.Files.GetBuildAction(file))
-                    {
-                        case BuildAction.Compile:
-                            ss.WriteLine("				  <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
-                            break;
-                        default:
-                            break;
-                    }
-                }
-                ss.WriteLine("			  </sources>");
-                ss.WriteLine("			  <references basedir=\"${project::get-base-directory()}\">");
-                ss.WriteLine("				  <lib>");
-                ss.WriteLine("					  <include name=\"${project::get-base-directory()}\" />");
+				ss.WriteLine("			  <resources prefix=\"{0}\" dynamicprefix=\"true\" >", project.RootNamespace);
+				foreach (string file in project.Files)
+				{
+					switch (project.Files.GetBuildAction(file))
+					{
+						case BuildAction.EmbeddedResource:
+							ss.WriteLine("				  {0}", "<include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
+							break;
+						default:
+							if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
+							{
+								ss.WriteLine("				  <include name=\"{0}\" />", file.Substring(0, file.LastIndexOf('.')) + ".resx");
+							}
+							break;
+					}
+				}
+				//if (project.Files.GetSubType(file).ToString() != "Code")
+				//{
+				//	ps.WriteLine("	  <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");					
+
+				ss.WriteLine("			  </resources>");
+				ss.WriteLine("			  <sources failonempty=\"true\">");
+				foreach (string file in project.Files)
+				{
+					switch (project.Files.GetBuildAction(file))
+					{
+						case BuildAction.Compile:
+							ss.WriteLine("				  <include name=\"" + Helper.NormalizePath(PrependPath(file), '/') + "\" />");
+							break;
+						default:
+							break;
+					}
+				}
+				ss.WriteLine("			  </sources>");
+				ss.WriteLine("			  <references basedir=\"${project::get-base-directory()}\">");
+				ss.WriteLine("				  <lib>");
+				ss.WriteLine("					  <include name=\"${project::get-base-directory()}\" />");
                 foreach(ReferencePathNode refPath in project.ReferencePaths)
                 {
                     ss.WriteLine("					  <include name=\"${project::get-base-directory()}/" + refPath.Path.TrimEnd('/', '\\') + "\" />");
                 }
-                ss.WriteLine("				  </lib>");
-                foreach (ReferenceNode refr in project.References)
-                {
-                    string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/');
+				ss.WriteLine("				  </lib>");
+				foreach (ReferenceNode refr in project.References)
+				{
+					string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/');
                     if (refr.Path != null) {
                         if (ExtensionSpecified(refr.Name))
                         {
@@ -334,12 +377,12 @@ namespace Prebuild.Core.Targets
                     {
                         ss.WriteLine ("                <include name=\"" + path + "\" />");
                     }
-                }
-                ss.WriteLine("			  </references>");
+				}
+				ss.WriteLine("			  </references>");
 
-                ss.WriteLine("		  </csc>");
+				ss.WriteLine("		  </csc>");
 
-                foreach (ConfigurationNode conf in project.Configurations)
+				foreach (ConfigurationNode conf in project.Configurations)
                 {
                     if (!String.IsNullOrEmpty(conf.Options.OutputPath))
                     {
@@ -361,170 +404,170 @@ namespace Prebuild.Core.Targets
                     }
                 }
 
-                ss.WriteLine("	  </target>");
-
-                ss.WriteLine("	  <target name=\"clean\">");
-                ss.WriteLine("		  <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
-                ss.WriteLine("		  <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
-                ss.WriteLine("	  </target>");
-
-                ss.WriteLine("	  <target name=\"doc\" description=\"Creates documentation.\">");
-                if (hasDoc)
-                {
-                    ss.WriteLine("		  <property name=\"doc.target\" value=\"\" />");
-                    ss.WriteLine("		  <if test=\"${platform::is-unix()}\">");
-                    ss.WriteLine("			  <property name=\"doc.target\" value=\"Web\" />");
-                    ss.WriteLine("		  </if>");
-                    ss.WriteLine("		  <ndoc failonerror=\"false\" verbose=\"true\">");
-                    ss.WriteLine("			  <assemblies basedir=\"${project::get-base-directory()}\">");
-                    ss.Write("				  <include name=\"${build.dir}/${project::get-name()}");
-                    if (project.Type == ProjectType.Library)
-                    {
-                        ss.WriteLine(".dll\" />");
-                    }
-                    else
-                    {
-                        ss.WriteLine(".exe\" />");
-                    }
-
-                    ss.WriteLine("			  </assemblies>");
-                    ss.WriteLine("			  <summaries basedir=\"${project::get-base-directory()}\">");
-                    ss.WriteLine("				  <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
-                    ss.WriteLine("			  </summaries>");
-                    ss.WriteLine("			  <referencepaths basedir=\"${project::get-base-directory()}\">");
-                    ss.WriteLine("				  <include name=\"${build.dir}\" />");
-                    //					foreach(ReferenceNode refr in project.References)
-                    //					{
-                    //						string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
-                    //						if (path != "")
-                    //						{
-                    //							ss.WriteLine("				  <include name=\"{0}\" />", path);
-                    //						}
-                    //					}
-                    ss.WriteLine("			  </referencepaths>");
-                    ss.WriteLine("			  <documenters>");
-                    ss.WriteLine("				  <documenter name=\"MSDN\">");
-                    ss.WriteLine("					  <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
-                    ss.WriteLine("					  <property name=\"OutputTarget\" value=\"${doc.target}\" />");
-                    ss.WriteLine("					  <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
-                    ss.WriteLine("					  <property name=\"IncludeFavorites\" value=\"False\" />");
-                    ss.WriteLine("					  <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
-                    ss.WriteLine("					  <property name=\"SplitTOCs\" value=\"False\" />");
-                    ss.WriteLine("					  <property name=\"DefaulTOC\" value=\"\" />");
-                    ss.WriteLine("					  <property name=\"ShowVisualBasic\" value=\"True\" />");
-                    ss.WriteLine("					  <property name=\"AutoDocumentConstructors\" value=\"True\" />");
-                    ss.WriteLine("					  <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
-                    ss.WriteLine("					  <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
-                    ss.WriteLine("					  <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
-                    ss.WriteLine("					  <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
-                    ss.WriteLine("					  <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
-                    ss.WriteLine("					  <property name=\"DocumentInternals\" value=\"False\" />");
-                    ss.WriteLine("					  <property name=\"DocumentPrivates\" value=\"False\" />");
-                    ss.WriteLine("					  <property name=\"DocumentProtected\" value=\"True\" />");
-                    ss.WriteLine("					  <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
-                    ss.WriteLine("					  <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
-                    ss.WriteLine("				  </documenter>");
-                    ss.WriteLine("			  </documenters>");
-                    ss.WriteLine("		  </ndoc>");
-                }
-                ss.WriteLine("	  </target>");
-                ss.WriteLine("</project>");
-            }
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void WriteCombine(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Creating NAnt build files");
-            foreach (ProjectNode project in solution.Projects)
-            {
-                if (m_Kernel.AllowProject(project.FilterGroups))
-                {
-                    m_Kernel.Log.Write("...Creating project: {0}", project.Name);
-                    WriteProject(solution, project);
-                }
-            }
-
-            m_Kernel.Log.Write("");
-            string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
-            StreamWriter ss = new StreamWriter(combFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
-
-            using (ss)
-            {
-                ss.WriteLine("<?xml version=\"1.0\" ?>");
-                ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
-                ss.WriteLine("	  <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
-                ss.WriteLine();
-
-                //ss.WriteLine("	<property name=\"dist.dir\" value=\"dist\" />");
-                //ss.WriteLine("	<property name=\"source.dir\" value=\"source\" />");
-                ss.WriteLine("	  <property name=\"bin.dir\" value=\"bin\" />");
-                ss.WriteLine("	  <property name=\"obj.dir\" value=\"obj\" />");
-                ss.WriteLine("	  <property name=\"doc.dir\" value=\"doc\" />");
-                ss.WriteLine("	  <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
-
-                // Use the active configuration, which is the first configuration name in the prebuild file.
-                Dictionary<string,string> emittedConfigurations = new Dictionary<string, string>();
-
-                ss.WriteLine("	  <property name=\"project.config\" value=\"{0}\" />", solution.ActiveConfig);
-                ss.WriteLine();
-
-                foreach (ConfigurationNode conf in solution.Configurations)
-                {
-                    // If the name isn't in the emitted configurations, we give a high level target to the
-                    // platform specific on. This lets "Debug" point to "Debug-AnyCPU".
-                    if (!emittedConfigurations.ContainsKey(conf.Name))
-                    {
-                        // Add it to the dictionary so we only emit one.
-                        emittedConfigurations.Add(conf.Name, conf.Platform);
-
-                        // Write out the target block.
-                        ss.WriteLine("	  <target name=\"{0}\" description=\"{0}|{1}\" depends=\"{0}-{1}\">", conf.Name, conf.Platform);
-                        ss.WriteLine("	  </target>");
-                        ss.WriteLine();
-                    }
-
-                    // Write out the target for the configuration.
-                    ss.WriteLine("	  <target name=\"{0}-{1}\" description=\"{0}|{1}\">", conf.Name, conf.Platform);
-                    ss.WriteLine("		  <property name=\"project.config\" value=\"{0}\" />", conf.Name);
-                    ss.WriteLine("		  <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
-                    ss.WriteLine("\t\t  <property name=\"build.platform\" value=\"{0}\" />", conf.Platform);
-                    ss.WriteLine("	  </target>");
-                    ss.WriteLine();
-                }
-
-                ss.WriteLine("	  <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
-                ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
-                ss.WriteLine("	  </target>");
-                ss.WriteLine();
-
-                ss.WriteLine("	  <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
-                ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
-                ss.WriteLine("	  </target>");
-                ss.WriteLine();
-
-                ss.WriteLine("	  <target name=\"net-3.5\" description=\"Sets framework to .NET 3.5\">");
-                ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"net-3.5\" />");
-                ss.WriteLine("	  </target>");
-                ss.WriteLine();
-
-                ss.WriteLine("	  <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
-                ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
-                ss.WriteLine("	  </target>");
-                ss.WriteLine();
-
-                ss.WriteLine("	  <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
-                ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
-                ss.WriteLine("	  </target>");
-                ss.WriteLine();
-
-                ss.WriteLine("	  <target name=\"mono-3.5\" description=\"Sets framework to mono 3.5\">");
-                ss.WriteLine("        <property name=\"nant.settings.currentframework\" value=\"mono-3.5\" />");
-                ss.WriteLine("    </target>");
-                ss.WriteLine();
+				ss.WriteLine("	  </target>");
+
+				ss.WriteLine("	  <target name=\"clean\">");
+				ss.WriteLine("		  <delete dir=\"${bin.dir}\" failonerror=\"false\" />");
+				ss.WriteLine("		  <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
+				ss.WriteLine("	  </target>");
+
+				ss.WriteLine("	  <target name=\"doc\" description=\"Creates documentation.\">");
+				if (hasDoc)
+				{
+					ss.WriteLine("		  <property name=\"doc.target\" value=\"\" />");
+					ss.WriteLine("		  <if test=\"${platform::is-unix()}\">");
+					ss.WriteLine("			  <property name=\"doc.target\" value=\"Web\" />");
+					ss.WriteLine("		  </if>");
+					ss.WriteLine("		  <ndoc failonerror=\"false\" verbose=\"true\">");
+					ss.WriteLine("			  <assemblies basedir=\"${project::get-base-directory()}\">");
+					ss.Write("				  <include name=\"${build.dir}/${project::get-name()}");
+					if (project.Type == ProjectType.Library)
+					{
+						ss.WriteLine(".dll\" />");
+					}
+					else
+					{
+						ss.WriteLine(".exe\" />");
+					}
+
+					ss.WriteLine("			  </assemblies>");
+					ss.WriteLine("			  <summaries basedir=\"${project::get-base-directory()}\">");
+					ss.WriteLine("				  <include name=\"${build.dir}/${project::get-name()}.xml\"/>");
+					ss.WriteLine("			  </summaries>");
+					ss.WriteLine("			  <referencepaths basedir=\"${project::get-base-directory()}\">");
+					ss.WriteLine("				  <include name=\"${build.dir}\" />");
+					//					foreach(ReferenceNode refr in project.References)
+					//					{
+					//						string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReferencePath(solution, refr)), '/');
+					//						if (path != "")
+					//						{
+					//							ss.WriteLine("				  <include name=\"{0}\" />", path);
+					//						}
+					//					}
+					ss.WriteLine("			  </referencepaths>");
+					ss.WriteLine("			  <documenters>");
+					ss.WriteLine("				  <documenter name=\"MSDN\">");
+					ss.WriteLine("					  <property name=\"OutputDirectory\" value=\"${project::get-base-directory()}/${build.dir}/doc/${project::get-name()}\" />");
+					ss.WriteLine("					  <property name=\"OutputTarget\" value=\"${doc.target}\" />");
+					ss.WriteLine("					  <property name=\"HtmlHelpName\" value=\"${project::get-name()}\" />");
+					ss.WriteLine("					  <property name=\"IncludeFavorites\" value=\"False\" />");
+					ss.WriteLine("					  <property name=\"Title\" value=\"${project::get-name()} SDK Documentation\" />");
+					ss.WriteLine("					  <property name=\"SplitTOCs\" value=\"False\" />");
+					ss.WriteLine("					  <property name=\"DefaulTOC\" value=\"\" />");
+					ss.WriteLine("					  <property name=\"ShowVisualBasic\" value=\"True\" />");
+					ss.WriteLine("					  <property name=\"AutoDocumentConstructors\" value=\"True\" />");
+					ss.WriteLine("					  <property name=\"ShowMissingSummaries\" value=\"${build.debug}\" />");
+					ss.WriteLine("					  <property name=\"ShowMissingRemarks\" value=\"${build.debug}\" />");
+					ss.WriteLine("					  <property name=\"ShowMissingParams\" value=\"${build.debug}\" />");
+					ss.WriteLine("					  <property name=\"ShowMissingReturns\" value=\"${build.debug}\" />");
+					ss.WriteLine("					  <property name=\"ShowMissingValues\" value=\"${build.debug}\" />");
+					ss.WriteLine("					  <property name=\"DocumentInternals\" value=\"False\" />");
+					ss.WriteLine("					  <property name=\"DocumentPrivates\" value=\"False\" />");
+					ss.WriteLine("					  <property name=\"DocumentProtected\" value=\"True\" />");
+					ss.WriteLine("					  <property name=\"DocumentEmptyNamespaces\" value=\"${build.debug}\" />");
+					ss.WriteLine("					  <property name=\"IncludeAssemblyVersion\" value=\"True\" />");
+					ss.WriteLine("				  </documenter>");
+					ss.WriteLine("			  </documenters>");
+					ss.WriteLine("		  </ndoc>");
+				}
+				ss.WriteLine("	  </target>");
+				ss.WriteLine("</project>");
+			}
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void WriteCombine(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Creating NAnt build files");
+			foreach (ProjectNode project in solution.Projects)
+			{
+				if (m_Kernel.AllowProject(project.FilterGroups))
+				{
+					m_Kernel.Log.Write("...Creating project: {0}", project.Name);
+					WriteProject(solution, project);
+				}
+			}
+
+			m_Kernel.Log.Write("");
+			string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "build");
+			StreamWriter ss = new StreamWriter(combFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
+
+			using (ss)
+			{
+				ss.WriteLine("<?xml version=\"1.0\" ?>");
+				ss.WriteLine("<project name=\"{0}\" default=\"build\">", solution.Name);
+				ss.WriteLine("	  <echo message=\"Using '${nant.settings.currentframework}' Framework\"/>");
+				ss.WriteLine();
+
+				//ss.WriteLine("	<property name=\"dist.dir\" value=\"dist\" />");
+				//ss.WriteLine("	<property name=\"source.dir\" value=\"source\" />");
+				ss.WriteLine("	  <property name=\"bin.dir\" value=\"bin\" />");
+				ss.WriteLine("	  <property name=\"obj.dir\" value=\"obj\" />");
+				ss.WriteLine("	  <property name=\"doc.dir\" value=\"doc\" />");
+				ss.WriteLine("	  <property name=\"project.main.dir\" value=\"${project::get-base-directory()}\" />");
+
+				// Use the active configuration, which is the first configuration name in the prebuild file.
+				Dictionary<string,string> emittedConfigurations = new Dictionary<string, string>();
+
+				ss.WriteLine("	  <property name=\"project.config\" value=\"{0}\" />", solution.ActiveConfig);
+				ss.WriteLine();
+
+				foreach (ConfigurationNode conf in solution.Configurations)
+				{
+					// If the name isn't in the emitted configurations, we give a high level target to the 
+					// platform specific on. This lets "Debug" point to "Debug-AnyCPU".
+					if (!emittedConfigurations.ContainsKey(conf.Name))
+					{
+						// Add it to the dictionary so we only emit one.
+						emittedConfigurations.Add(conf.Name, conf.Platform);
+
+						// Write out the target block.
+						ss.WriteLine("	  <target name=\"{0}\" description=\"{0}|{1}\" depends=\"{0}-{1}\">", conf.Name, conf.Platform);
+						ss.WriteLine("	  </target>");
+						ss.WriteLine();
+					}
+
+					// Write out the target for the configuration.
+					ss.WriteLine("	  <target name=\"{0}-{1}\" description=\"{0}|{1}\">", conf.Name, conf.Platform);
+					ss.WriteLine("		  <property name=\"project.config\" value=\"{0}\" />", conf.Name);
+					ss.WriteLine("		  <property name=\"build.debug\" value=\"{0}\" />", conf.Options["DebugInformation"].ToString().ToLower());
+					ss.WriteLine("\t\t  <property name=\"build.platform\" value=\"{0}\" />", conf.Platform);
+					ss.WriteLine("	  </target>");
+					ss.WriteLine();
+				}
+
+				ss.WriteLine("	  <target name=\"net-1.1\" description=\"Sets framework to .NET 1.1\">");
+				ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"net-1.1\" />");
+				ss.WriteLine("	  </target>");
+				ss.WriteLine();
+
+				ss.WriteLine("	  <target name=\"net-2.0\" description=\"Sets framework to .NET 2.0\">");
+				ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"net-2.0\" />");
+				ss.WriteLine("	  </target>");
+				ss.WriteLine();
+
+				ss.WriteLine("	  <target name=\"net-3.5\" description=\"Sets framework to .NET 3.5\">");
+				ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"net-3.5\" />");
+				ss.WriteLine("	  </target>");
+				ss.WriteLine();
+
+				ss.WriteLine("	  <target name=\"mono-1.0\" description=\"Sets framework to mono 1.0\">");
+				ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"mono-1.0\" />");
+				ss.WriteLine("	  </target>");
+				ss.WriteLine();
+
+				ss.WriteLine("	  <target name=\"mono-2.0\" description=\"Sets framework to mono 2.0\">");
+				ss.WriteLine("		  <property name=\"nant.settings.currentframework\" value=\"mono-2.0\" />");
+				ss.WriteLine("	  </target>");
+				ss.WriteLine();
+
+				ss.WriteLine("	  <target name=\"mono-3.5\" description=\"Sets framework to mono 3.5\">");
+				ss.WriteLine("        <property name=\"nant.settings.currentframework\" value=\"mono-3.5\" />");
+				ss.WriteLine("    </target>");
+				ss.WriteLine();
 
                 ss.WriteLine("    <target name=\"init\" description=\"\">");
                 ss.WriteLine("        <call target=\"${project.config}\" />");
@@ -594,24 +637,6 @@ namespace Prebuild.Core.Targets
                 ss.WriteLine("    <target name=\"clean\" description=\"\">");
                 ss.WriteLine("        <echo message=\"Deleting all builds from all configurations\" />");
                 //ss.WriteLine("        <delete dir=\"${dist.dir}\" failonerror=\"false\" />");
-
-                // justincc: FIXME FIXME FIXME - A temporary OpenSim hack to clean up files when "nant clean" is executed.
-                // Should be replaced with extreme prejudice once anybody finds out if the CleanFiles stuff works or there is
-                // another working mechanism for specifying this stuff
-                ss.WriteLine("        <delete failonerror=\"false\">");
-                ss.WriteLine("        <fileset basedir=\"${bin.dir}\">");
-                ss.WriteLine("            <include name=\"OpenSim*.dll\"/>");
-                ss.WriteLine("            <include name=\"OpenSim*.dll.mdb\"/>");
-                ss.WriteLine("            <include name=\"OpenSim*.exe\"/>");
-                ss.WriteLine("            <include name=\"OpenSim*.exe.mdb\"/>");
-                ss.WriteLine("            <include name=\"ScriptEngines/*\"/>");
-                ss.WriteLine("            <include name=\"Physics/*.dll\"/>");
-                ss.WriteLine("            <include name=\"Physics/*.dll.mdb\"/>");
-                ss.WriteLine("            <exclude name=\"OpenSim.32BitLaunch.exe\"/>");
-                ss.WriteLine("            <exclude name=\"ScriptEngines/Default.lsl\"/>");
-                ss.WriteLine("        </fileset>");
-                ss.WriteLine("        </delete>");
-
                 if (solution.Cleanup != null && solution.Cleanup.CleanFiles.Count > 0)
                 {
                     foreach (CleanFilesNode cleanFile in solution.Cleanup.CleanFiles)
@@ -625,7 +650,7 @@ namespace Prebuild.Core.Targets
                     }
                 }
 
-                ss.WriteLine("        <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
+			    ss.WriteLine("        <delete dir=\"${obj.dir}\" failonerror=\"false\" />");
                 foreach (ProjectNode project in solution.Projects)
                 {
                     string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);

+ 44 - 44
Prebuild/src/Core/Targets/SharpDevelop2Target.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -29,11 +29,11 @@ using Prebuild.Core.Attributes;
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("sharpdev2")]
-    public class SharpDevelop2Target : VS2005Target
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("sharpdev2")]
+	public class SharpDevelop2Target : VS2005Target
     {
         #region Properties
         public override string VersionName
@@ -45,38 +45,38 @@ namespace Prebuild.Core.Targets
         }
         #endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public override void Write(Kernel kern)
-        {
-            base.Write(kern);
-        }
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public override void Write(Kernel kern)
+		{
+			base.Write(kern);
+		}
 
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public override void Clean(Kernel kern)
-        {
-            base.Clean(kern);
-        }
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public override void Clean(Kernel kern)
+		{
+			base.Clean(kern);
+		}
 
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public override string Name
-        {
-            get
-            {
-                return "sharpdev2";
-            }
-        }
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public override string Name
+		{
+			get
+			{
+				return "sharpdev2";
+			}
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 397 - 397
Prebuild/src/Core/Targets/SharpDevelopTarget.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004 Matthew Holmes ([email protected]), Dan Moorehead (da
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -34,392 +34,392 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("sharpdev")]
-    public class SharpDevelopTarget : ITarget
-    {
-        #region Fields
-
-        private Kernel m_Kernel;
-
-        #endregion
-
-        #region Private Methods
-
-        private static string PrependPath(string path)
-        {
-            string tmpPath = Helper.NormalizePath(path, '/');
-            Regex regex = new Regex(@"(\w):/(\w+)");
-            Match match = regex.Match(tmpPath);
-            if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
-            {
-                tmpPath = Helper.NormalizePath(tmpPath);
-            }
-            else
-            {
-                tmpPath = Helper.NormalizePath("./" + tmpPath);
-            }
-
-            return tmpPath;
-        }
-
-        private static string BuildReference(SolutionNode solution, ReferenceNode refr)
-        {
-            string ret = "<Reference type=\"";
-            if(solution.ProjectsTable.ContainsKey(refr.Name))
-            {
-                ret += "Project\" refto=\"" + refr.Name;
-                ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
-            }
-            else
-            {
-                ProjectNode project = (ProjectNode)refr.Parent;
-                string fileRef = FindFileReference(refr.Name, project);
-
-                if(refr.Path != null || fileRef != null)
-                {
-                    ret += "Assembly\" refto=\"";
-
-                    string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
-
-                    ret += finalPath;
-                    ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
-                    return ret;
-                }
-
-                ret += "Gac\" refto=\"";
-                try
-                {
-                    //Assembly assem = Assembly.Load(refr.Name);
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("sharpdev")]
+	public class SharpDevelopTarget : ITarget
+	{
+		#region Fields
+
+		private Kernel m_Kernel;
+
+		#endregion
+
+		#region Private Methods
+
+		private static string PrependPath(string path)
+		{
+			string tmpPath = Helper.NormalizePath(path, '/');
+			Regex regex = new Regex(@"(\w):/(\w+)");
+			Match match = regex.Match(tmpPath);
+			if(match.Success || tmpPath[0] == '.' || tmpPath[0] == '/')
+			{
+				tmpPath = Helper.NormalizePath(tmpPath);
+			}
+			else
+			{
+				tmpPath = Helper.NormalizePath("./" + tmpPath);
+			}
+
+			return tmpPath;
+		}
+
+		private static string BuildReference(SolutionNode solution, ReferenceNode refr)
+		{
+			string ret = "<Reference type=\"";
+			if(solution.ProjectsTable.ContainsKey(refr.Name))
+			{
+				ret += "Project\" refto=\"" + refr.Name;
+				ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
+			}
+			else
+			{
+				ProjectNode project = (ProjectNode)refr.Parent;
+				string fileRef = FindFileReference(refr.Name, project);
+
+				if(refr.Path != null || fileRef != null)
+				{
+					ret += "Assembly\" refto=\"";
+
+					string finalPath = (refr.Path != null) ? Helper.MakeFilePath(refr.Path, refr.Name, "dll") : fileRef;
+
+					ret += finalPath;
+					ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
+					return ret;
+				}
+
+				ret += "Gac\" refto=\"";
+				try
+				{
+					//Assembly assem = Assembly.Load(refr.Name);
                     ret += refr.Name;// assem.FullName;
-                }
-                catch (System.NullReferenceException e)
-                {
-                    e.ToString();
-                    ret += refr.Name;
-                }
-                ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
-            }
-
-            return ret;
-        }
-
-        private static string FindFileReference(string refName, ProjectNode project)
-        {
-            foreach(ReferencePathNode refPath in project.ReferencePaths)
-            {
-                string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
-
-                if(File.Exists(fullPath))
-                {
-                    return fullPath;
-                }
-            }
-
-            return null;
-        }
-
-        /// <summary>
-        /// Gets the XML doc file.
-        /// </summary>
-        /// <param name="project">The project.</param>
-        /// <param name="conf">The conf.</param>
-        /// <returns></returns>
-        public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf)
-        {
-            if( conf == null )
-            {
-                throw new ArgumentNullException("conf");
-            }
-            if( project == null )
-            {
-                throw new ArgumentNullException("project");
-            }
-            string docFile = (string)conf.Options["XmlDocFile"];
-            if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
-            {
-                return "False";
-            }
-            return "True";
-        }
-
-        private void WriteProject(SolutionNode solution, ProjectNode project)
-        {
-            string csComp = "Csc";
-            string netRuntime = "MsNet";
-            if(project.Runtime == ClrRuntime.Mono)
-            {
-                csComp = "Mcs";
-                netRuntime = "Mono";
-            }
-
-            string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
-            StreamWriter ss = new StreamWriter(projFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
-
-            using(ss)
-            {
-                ss.WriteLine(
-                    "<Project name=\"{0}\" standardNamespace=\"{1}\" description=\"\" newfilesearch=\"None\" enableviewstate=\"True\" version=\"1.1\" projecttype=\"C#\">",
-                    project.Name,
-                    project.RootNamespace
-                    );
-
-                ss.WriteLine("  <Contents>");
-                foreach(string file in project.Files)
-                {
-                    string buildAction = "Compile";
-                    switch(project.Files.GetBuildAction(file))
-                    {
-                        case BuildAction.None:
-                            buildAction = "Nothing";
-                            break;
-
-                        case BuildAction.Content:
-                            buildAction = "Exclude";
-                            break;
-
-                        case BuildAction.EmbeddedResource:
-                            buildAction = "EmbedAsResource";
-                            break;
-
-                        default:
-                            buildAction = "Compile";
-                            break;
-                    }
-
-                    // Sort of a hack, we try and resolve the path and make it relative, if we can.
-                    string filePath = PrependPath(file);
-                    ss.WriteLine("    <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction);
-                }
-                ss.WriteLine("  </Contents>");
-
-                ss.WriteLine("  <References>");
-                foreach(ReferenceNode refr in project.References)
-                {
-                    ss.WriteLine("    {0}", BuildReference(solution, refr));
-                }
-                ss.WriteLine("  </References>");
-
-                ss.Write("  <DeploymentInformation");
-                ss.Write(" target=\"\"");
-                ss.Write(" script=\"\"");
-                ss.Write(" strategy=\"File\"");
-                ss.WriteLine(" />");
-
-                int count = 0;
-
-                ss.WriteLine("  <Configurations active=\"{0}\">", solution.ActiveConfig);
-
-                foreach(ConfigurationNode conf in project.Configurations)
-                {
-                    ss.Write("    <Configuration");
-                    ss.Write(" runwithwarnings=\"True\"");
-                    ss.Write(" name=\"{0}\"", conf.Name);
-                    ss.WriteLine(">");
-                    ss.Write("      <CodeGeneration");
-                    ss.Write(" runtime=\"{0}\"", netRuntime);
-                    ss.Write(" compiler=\"{0}\"", csComp);
-                    ss.Write(" compilerversion=\"\"");
-                    ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
-                    ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
-                    ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
-                    ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
-                    ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
-                    ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
-                    ss.Write(" mainclass=\"{0}\"", project.StartupObject);
-                    ss.Write(" target=\"{0}\"", project.Type);
-                    ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
-                    ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
-                    ss.Write(" win32Icon=\"{0}\"", Helper.NormalizePath(".\\" + project.AppIcon));
-                    ss.Write(" noconfig=\"{0}\"", "False");
-                    ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
-                    ss.WriteLine(" />");
-
-                    ss.Write("      <Execution");
-                    ss.Write(" commandlineparameters=\"\"");
-                    ss.Write(" consolepause=\"True\"");
-                    ss.WriteLine(" />");
-
-                    ss.Write("      <Output");
-                    ss.Write(" directory=\".\\{0}\"", Helper.NormalizePath(conf.Options["OutputPath"].ToString()));
-                    ss.Write(" assembly=\"{0}\"", project.AssemblyName);
-                    ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
-                    if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
-                    {
-                        ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
-                    }
-                    else
-                    {
-                        ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
-                    }
-                    if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
-                    {
-                        ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
-                    }
-                    else
-                    {
-                        ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
-                    }
-                    ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
-                    ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
-                    ss.WriteLine(" />");
-                    ss.WriteLine("    </Configuration>");
-
-                    count++;
-                }
-                ss.WriteLine("  </Configurations>");
-                ss.WriteLine("</Project>");
-            }
-
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void WriteCombine(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Creating SharpDevelop combine and project files");
-            foreach(ProjectNode project in solution.Projects)
-            {
-                if(m_Kernel.AllowProject(project.FilterGroups))
-                {
-                    m_Kernel.Log.Write("...Creating project: {0}", project.Name);
-                    WriteProject(solution, project);
-                }
-            }
-
-            m_Kernel.Log.Write("");
-            string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
-            StreamWriter ss = new StreamWriter(combFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
-
-            using(ss)
-            {
-                ss.WriteLine("<Combine fileversion=\"1.0\" name=\"{0}\" description=\"\">", solution.Name);
-
-                int count = 0;
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    if(count == 0)
-                        ss.WriteLine("  <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
-
-                    ss.WriteLine("    <Execute entry=\"{0}\" type=\"None\" />", project.Name);
-                    count++;
-                }
-                ss.WriteLine("  </StartMode>");
-
-                ss.WriteLine("  <Entries>");
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
-                    ss.WriteLine("    <Entry filename=\"{0}\" />",
-                        Helper.MakeFilePath(path, project.Name, "prjx"));
-                }
-                ss.WriteLine("  </Entries>");
-
-                count = 0;
-                foreach(ConfigurationNode conf in solution.Configurations)
-                {
-                    if(count == 0)
-                    {
-                        ss.WriteLine("  <Configurations active=\"{0}\">", conf.Name);
-                    }
-
-                    ss.WriteLine("    <Configuration name=\"{0}\">", conf.Name);
-                    foreach(ProjectNode project in solution.Projects)
-                    {
-                        ss.WriteLine("      <Entry name=\"{0}\" configurationname=\"{1}\" build=\"True\" />", project.Name, conf.Name);
-                    }
-                    ss.WriteLine("    </Configuration>");
-
-                    count++;
-                }
-                ss.WriteLine("  </Configurations>");
-                ss.WriteLine("</Combine>");
-            }
-
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void CleanProject(ProjectNode project)
-        {
-            m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
-            Helper.DeleteIfExists(projectFile);
-        }
-
-        private void CleanSolution(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Cleaning SharpDevelop combine and project files for", solution.Name);
-
-            string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
-            Helper.DeleteIfExists(slnFile);
-
-            foreach(ProjectNode project in solution.Projects)
-            {
-                CleanProject(project);
-            }
-
-            m_Kernel.Log.Write("");
-        }
-
-        #endregion
-
-        #region ITarget Members
-
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public void Write(Kernel kern)
-        {
-            if( kern == null )
-            {
-                throw new ArgumentNullException("kern");
-            }
-            m_Kernel = kern;
-            foreach(SolutionNode solution in kern.Solutions)
-            {
-                WriteCombine(solution);
-            }
-            m_Kernel = null;
-        }
-
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public virtual void Clean(Kernel kern)
-        {
-            if( kern == null )
-            {
-                throw new ArgumentNullException("kern");
-            }
-            m_Kernel = kern;
-            foreach(SolutionNode sol in kern.Solutions)
-            {
-                CleanSolution(sol);
-            }
-            m_Kernel = null;
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return "sharpdev";
-            }
-        }
-
-        #endregion
-    }
+				}
+				catch (System.NullReferenceException e)
+				{
+					e.ToString();
+					ret += refr.Name;
+				}
+				ret += "\" localcopy=\"" + refr.LocalCopy.ToString() + "\" />";
+			}
+
+			return ret;
+		}
+
+		private static string FindFileReference(string refName, ProjectNode project) 
+		{
+			foreach(ReferencePathNode refPath in project.ReferencePaths) 
+			{
+				string fullPath = Helper.MakeFilePath(refPath.Path, refName, "dll");
+
+				if(File.Exists(fullPath)) 
+				{
+					return fullPath;
+				}
+			}
+
+			return null;
+		}
+
+		/// <summary>
+		/// Gets the XML doc file.
+		/// </summary>
+		/// <param name="project">The project.</param>
+		/// <param name="conf">The conf.</param>
+		/// <returns></returns>
+		public static string GenerateXmlDocFile(ProjectNode project, ConfigurationNode conf) 
+		{
+			if( conf == null )
+			{
+				throw new ArgumentNullException("conf");
+			}
+			if( project == null )
+			{
+				throw new ArgumentNullException("project");
+			}
+			string docFile = (string)conf.Options["XmlDocFile"];
+			if(docFile != null && docFile.Length == 0)//default to assembly name if not specified
+			{
+				return "False";
+			}
+			return "True";
+		}
+
+		private void WriteProject(SolutionNode solution, ProjectNode project)
+		{
+			string csComp = "Csc";
+			string netRuntime = "MsNet";
+			if(project.Runtime == ClrRuntime.Mono)
+			{
+				csComp = "Mcs";
+				netRuntime = "Mono";
+			}
+
+			string projFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
+			StreamWriter ss = new StreamWriter(projFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(projFile));
+
+			using(ss)
+			{
+				ss.WriteLine(
+					"<Project name=\"{0}\" standardNamespace=\"{1}\" description=\"\" newfilesearch=\"None\" enableviewstate=\"True\" version=\"1.1\" projecttype=\"C#\">",
+					project.Name,
+					project.RootNamespace
+					);
+
+				ss.WriteLine("  <Contents>");
+				foreach(string file in project.Files)
+				{
+					string buildAction = "Compile";
+					switch(project.Files.GetBuildAction(file))
+					{
+						case BuildAction.None:
+							buildAction = "Nothing";
+							break;
+
+						case BuildAction.Content:
+							buildAction = "Exclude";
+							break;
+
+						case BuildAction.EmbeddedResource:
+							buildAction = "EmbedAsResource";
+							break;
+
+						default:
+							buildAction = "Compile";
+							break;
+					}
+
+					// Sort of a hack, we try and resolve the path and make it relative, if we can.
+					string filePath = PrependPath(file);
+					ss.WriteLine("    <File name=\"{0}\" subtype=\"Code\" buildaction=\"{1}\" dependson=\"\" data=\"\" />", filePath, buildAction);
+				}
+				ss.WriteLine("  </Contents>");
+
+				ss.WriteLine("  <References>");
+				foreach(ReferenceNode refr in project.References)
+				{
+					ss.WriteLine("    {0}", BuildReference(solution, refr));
+				}
+				ss.WriteLine("  </References>");
+
+				ss.Write("  <DeploymentInformation");
+				ss.Write(" target=\"\"");
+				ss.Write(" script=\"\"");
+				ss.Write(" strategy=\"File\"");
+				ss.WriteLine(" />");
+
+				int count = 0;
+				
+				ss.WriteLine("  <Configurations active=\"{0}\">", solution.ActiveConfig);
+
+				foreach(ConfigurationNode conf in project.Configurations)
+				{
+					ss.Write("    <Configuration");
+					ss.Write(" runwithwarnings=\"True\"");
+					ss.Write(" name=\"{0}\"", conf.Name);
+					ss.WriteLine(">");
+					ss.Write("      <CodeGeneration");
+					ss.Write(" runtime=\"{0}\"", netRuntime);
+					ss.Write(" compiler=\"{0}\"", csComp);
+					ss.Write(" compilerversion=\"\"");
+					ss.Write(" warninglevel=\"{0}\"", conf.Options["WarningLevel"]);
+					ss.Write(" nowarn=\"{0}\"", conf.Options["SuppressWarnings"]);
+					ss.Write(" includedebuginformation=\"{0}\"", conf.Options["DebugInformation"]);
+					ss.Write(" optimize=\"{0}\"", conf.Options["OptimizeCode"]);
+					ss.Write(" unsafecodeallowed=\"{0}\"", conf.Options["AllowUnsafe"]);
+					ss.Write(" generateoverflowchecks=\"{0}\"", conf.Options["CheckUnderflowOverflow"]);
+					ss.Write(" mainclass=\"{0}\"", project.StartupObject);
+					ss.Write(" target=\"{0}\"", project.Type);
+					ss.Write(" definesymbols=\"{0}\"", conf.Options["CompilerDefines"]);
+					ss.Write(" generatexmldocumentation=\"{0}\"", GenerateXmlDocFile(project, conf));
+					ss.Write(" win32Icon=\"{0}\"", Helper.NormalizePath(".\\" + project.AppIcon));
+					ss.Write(" noconfig=\"{0}\"", "False");
+					ss.Write(" nostdlib=\"{0}\"", conf.Options["NoStdLib"]);
+					ss.WriteLine(" />");
+
+					ss.Write("      <Execution");
+					ss.Write(" commandlineparameters=\"\"");
+					ss.Write(" consolepause=\"True\"");
+					ss.WriteLine(" />");
+
+					ss.Write("      <Output");
+					ss.Write(" directory=\".\\{0}\"", Helper.NormalizePath(conf.Options["OutputPath"].ToString()));
+					ss.Write(" assembly=\"{0}\"", project.AssemblyName);
+					ss.Write(" executeScript=\"{0}\"", conf.Options["RunScript"]);
+					if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
+					{
+						ss.Write(" executeBeforeBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
+					}
+					else
+					{
+						ss.Write(" executeBeforeBuild=\"{0}\"", conf.Options["PreBuildEvent"]);
+					}
+					if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
+					{
+						ss.Write(" executeAfterBuild=\"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
+					}
+					else
+					{
+						ss.Write(" executeAfterBuild=\"{0}\"", conf.Options["PostBuildEvent"]);
+					}
+					ss.Write(" executeBeforeBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
+					ss.Write(" executeAfterBuildArguments=\"{0}\"", conf.Options["PreBuildEventArgs"]);
+					ss.WriteLine(" />");
+					ss.WriteLine("    </Configuration>");
+
+					count++;
+				}  
+				ss.WriteLine("  </Configurations>");
+				ss.WriteLine("</Project>");
+			}
+
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void WriteCombine(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Creating SharpDevelop combine and project files");
+			foreach(ProjectNode project in solution.Projects)
+			{
+				if(m_Kernel.AllowProject(project.FilterGroups)) 
+				{
+					m_Kernel.Log.Write("...Creating project: {0}", project.Name);
+					WriteProject(solution, project);
+				}
+			}
+
+			m_Kernel.Log.Write("");
+			string combFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
+			StreamWriter ss = new StreamWriter(combFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(combFile));
+            
+			using(ss)
+			{
+				ss.WriteLine("<Combine fileversion=\"1.0\" name=\"{0}\" description=\"\">", solution.Name);
+                
+				int count = 0;
+				foreach(ProjectNode project in solution.Projects)
+				{                    
+					if(count == 0)
+						ss.WriteLine("  <StartMode startupentry=\"{0}\" single=\"True\">", project.Name);
+
+					ss.WriteLine("    <Execute entry=\"{0}\" type=\"None\" />", project.Name);
+					count++;
+				}
+				ss.WriteLine("  </StartMode>");
+                
+				ss.WriteLine("  <Entries>");
+				foreach(ProjectNode project in solution.Projects)
+				{
+					string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
+					ss.WriteLine("    <Entry filename=\"{0}\" />",
+						Helper.MakeFilePath(path, project.Name, "prjx"));
+				}
+				ss.WriteLine("  </Entries>");
+
+				count = 0;
+				foreach(ConfigurationNode conf in solution.Configurations)
+				{
+					if(count == 0)
+					{
+						ss.WriteLine("  <Configurations active=\"{0}\">", conf.Name);
+					}
+
+					ss.WriteLine("    <Configuration name=\"{0}\">", conf.Name);
+					foreach(ProjectNode project in solution.Projects)
+					{
+						ss.WriteLine("      <Entry name=\"{0}\" configurationname=\"{1}\" build=\"True\" />", project.Name, conf.Name);
+					}
+					ss.WriteLine("    </Configuration>");
+
+					count++;
+				}
+				ss.WriteLine("  </Configurations>");
+				ss.WriteLine("</Combine>");
+			}
+
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void CleanProject(ProjectNode project)
+		{
+			m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "prjx");
+			Helper.DeleteIfExists(projectFile);
+		}
+
+		private void CleanSolution(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Cleaning SharpDevelop combine and project files for", solution.Name);
+
+			string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "cmbx");
+			Helper.DeleteIfExists(slnFile);
+
+			foreach(ProjectNode project in solution.Projects)
+			{
+				CleanProject(project);
+			}
+            
+			m_Kernel.Log.Write("");
+		}
+
+		#endregion
+
+		#region ITarget Members
+
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public void Write(Kernel kern)
+		{
+			if( kern == null )
+			{
+				throw new ArgumentNullException("kern");
+			}
+			m_Kernel = kern;
+			foreach(SolutionNode solution in kern.Solutions)
+			{
+				WriteCombine(solution);
+			}
+			m_Kernel = null;
+		}
+
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public virtual void Clean(Kernel kern)
+		{
+			if( kern == null )
+			{
+				throw new ArgumentNullException("kern");
+			}
+			m_Kernel = kern;
+			foreach(SolutionNode sol in kern.Solutions)
+			{
+				CleanSolution(sol);
+			}
+			m_Kernel = null;
+		}
+
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return "sharpdev";
+			}
+		}
+
+		#endregion
+	}
 }

+ 178 - 178
Prebuild/src/Core/Targets/ToolInfo.cs

@@ -4,194 +4,194 @@ using System.Text;
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public struct ToolInfo
-    {
-        string name;
-        string guid;
-        string fileExtension;
-        string xmlTag;
-        string importProject;
+	/// <summary>
+	/// 
+	/// </summary>
+	public struct ToolInfo
+	{
+		string name;
+		string guid;
+		string fileExtension;
+		string xmlTag;
+		string importProject;
 
-        /// <summary>
-        /// Gets or sets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public string Name
-        {
-            get
-            {
-                return name;
-            }
-            set
-            {
-                name = value;
-            }
-        }
+		/// <summary>
+		/// Gets or sets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public string Name
+		{
+			get
+			{
+				return name;
+			}
+			set
+			{
+				name = value;
+			}
+		}
 
-        /// <summary>
-        /// Gets or sets the GUID.
-        /// </summary>
-        /// <value>The GUID.</value>
-        public string Guid
-        {
-            get
-            {
-                return guid;
-            }
-            set
-            {
-                guid = value;
-            }
-        }
+		/// <summary>
+		/// Gets or sets the GUID.
+		/// </summary>
+		/// <value>The GUID.</value>
+		public string Guid
+		{
+			get
+			{
+				return guid;
+			}
+			set
+			{
+				guid = value;
+			}
+		}
 
-        /// <summary>
-        /// Gets or sets the file extension.
-        /// </summary>
-        /// <value>The file extension.</value>
-        public string FileExtension
-        {
-            get
-            {
-                return fileExtension;
-            }
-            set
-            {
-                fileExtension = value;
-            }
-        }
-        public string LanguageExtension
-        {
-            get
-            {
-                switch (this.Name)
-                {
-                    case "C#":
-                        return ".cs";
-                    case "VisualBasic":
-                        return ".vb";
-                    case "Boo":
-                        return ".boo";
-                    default:
-                        return ".cs";
-                }
-            }
-        }
-        /// <summary>
-        /// Gets or sets the XML tag.
-        /// </summary>
-        /// <value>The XML tag.</value>
-        public string XmlTag
-        {
-            get
-            {
-                return xmlTag;
-            }
-            set
-            {
-                xmlTag = value;
-            }
-        }
+		/// <summary>
+		/// Gets or sets the file extension.
+		/// </summary>
+		/// <value>The file extension.</value>
+		public string FileExtension
+		{
+			get
+			{
+				return fileExtension;
+			}
+			set
+			{
+				fileExtension = value;
+			}
+		}
+		public string LanguageExtension
+		{
+			get
+			{
+				switch (this.Name)
+				{
+					case "C#":
+						return ".cs";
+					case "VisualBasic":
+						return ".vb";
+					case "Boo":
+						return ".boo";
+					default:
+						return ".cs";
+				}
+			}
+		}
+		/// <summary>
+		/// Gets or sets the XML tag.
+		/// </summary>
+		/// <value>The XML tag.</value>
+		public string XmlTag
+		{
+			get
+			{
+				return xmlTag;
+			}
+			set
+			{
+				xmlTag = value;
+			}
+		}
 
-        /// <summary>
-        /// Gets or sets the import project property.
-        /// </summary>
-        /// <value>The ImportProject tag.</value>
-        public string ImportProject
-        {
-            get
-            {
-                return importProject;
-            }
-            set
-            {
-                importProject = value;
-            }
-        }
+		/// <summary>
+		/// Gets or sets the import project property.
+		/// </summary>
+		/// <value>The ImportProject tag.</value>
+		public string ImportProject
+		{
+			get
+			{
+				return importProject;
+			}
+			set
+			{
+				importProject = value;
+			}
+		}
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ToolInfo"/> class.
-        /// </summary>
-        /// <param name="name">The name.</param>
-        /// <param name="guid">The GUID.</param>
-        /// <param name="fileExtension">The file extension.</param>
-        /// <param name="xml">The XML.</param>
-        /// <param name="importProject">The import project.</param>
-        public ToolInfo(string name, string guid, string fileExtension, string xml, string importProject)
-        {
-            this.name = name;
-            this.guid = guid;
-            this.fileExtension = fileExtension;
-            this.xmlTag = xml;
-            this.importProject = importProject;
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="ToolInfo"/> class.
+		/// </summary>
+		/// <param name="name">The name.</param>
+		/// <param name="guid">The GUID.</param>
+		/// <param name="fileExtension">The file extension.</param>
+		/// <param name="xml">The XML.</param>
+		/// <param name="importProject">The import project.</param>
+		public ToolInfo(string name, string guid, string fileExtension, string xml, string importProject)
+		{
+			this.name = name;
+			this.guid = guid;
+			this.fileExtension = fileExtension;
+			this.xmlTag = xml;
+			this.importProject = importProject;
+		}
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ToolInfo"/> class.
-        /// </summary>
-        /// <param name="name">The name.</param>
-        /// <param name="guid">The GUID.</param>
-        /// <param name="fileExtension">The file extension.</param>
-        /// <param name="xml">The XML.</param>
-        public ToolInfo(string name, string guid, string fileExtension, string xml)
-        {
-            this.name = name;
-            this.guid = guid;
-            this.fileExtension = fileExtension;
-            this.xmlTag = xml;
-            this.importProject = "$(MSBuildBinPath)\\Microsoft." + xml + ".Targets";
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="ToolInfo"/> class.
+		/// </summary>
+		/// <param name="name">The name.</param>
+		/// <param name="guid">The GUID.</param>
+		/// <param name="fileExtension">The file extension.</param>
+		/// <param name="xml">The XML.</param>
+		public ToolInfo(string name, string guid, string fileExtension, string xml)
+		{
+			this.name = name;
+			this.guid = guid;
+			this.fileExtension = fileExtension;
+			this.xmlTag = xml;
+			this.importProject = "$(MSBuildBinPath)\\Microsoft." + xml + ".Targets";
+		}
 
-        /// <summary>
-        /// Equals operator
-        /// </summary>
-        /// <param name="obj">ToolInfo to compare</param>
-        /// <returns>true if toolInfos are equal</returns>
-        public override bool Equals(object obj)
-        {
-            if (obj == null)
-            {
-                throw new ArgumentNullException("obj");
-            }
-            if (obj.GetType() != typeof(ToolInfo))
-                return false;
+		/// <summary>
+		/// Equals operator
+		/// </summary>
+		/// <param name="obj">ToolInfo to compare</param>
+		/// <returns>true if toolInfos are equal</returns>
+		public override bool Equals(object obj)
+		{
+			if (obj == null)
+			{
+				throw new ArgumentNullException("obj");
+			}
+			if (obj.GetType() != typeof(ToolInfo))
+				return false;
 
-            ToolInfo c = (ToolInfo)obj;
-            return ((this.name == c.name) && (this.guid == c.guid) && (this.fileExtension == c.fileExtension) && (this.importProject == c.importProject));
-        }
+			ToolInfo c = (ToolInfo)obj;
+			return ((this.name == c.name) && (this.guid == c.guid) && (this.fileExtension == c.fileExtension) && (this.importProject == c.importProject));
+		}
 
-        /// <summary>
-        /// Equals operator
-        /// </summary>
-        /// <param name="c1">ToolInfo to compare</param>
-        /// <param name="c2">ToolInfo to compare</param>
-        /// <returns>True if toolInfos are equal</returns>
-        public static bool operator ==(ToolInfo c1, ToolInfo c2)
-        {
-            return ((c1.name == c2.name) && (c1.guid == c2.guid) && (c1.fileExtension == c2.fileExtension) && (c1.importProject == c2.importProject) && (c1.xmlTag == c2.xmlTag));
-        }
+		/// <summary>
+		/// Equals operator
+		/// </summary>
+		/// <param name="c1">ToolInfo to compare</param>
+		/// <param name="c2">ToolInfo to compare</param>
+		/// <returns>True if toolInfos are equal</returns>
+		public static bool operator ==(ToolInfo c1, ToolInfo c2)
+		{
+			return ((c1.name == c2.name) && (c1.guid == c2.guid) && (c1.fileExtension == c2.fileExtension) && (c1.importProject == c2.importProject) && (c1.xmlTag == c2.xmlTag));
+		}
 
-        /// <summary>
-        /// Not equals operator
-        /// </summary>
-        /// <param name="c1">ToolInfo to compare</param>
-        /// <param name="c2">ToolInfo to compare</param>
-        /// <returns>True if toolInfos are not equal</returns>
-        public static bool operator !=(ToolInfo c1, ToolInfo c2)
-        {
-            return !(c1 == c2);
-        }
+		/// <summary>
+		/// Not equals operator
+		/// </summary>
+		/// <param name="c1">ToolInfo to compare</param>
+		/// <param name="c2">ToolInfo to compare</param>
+		/// <returns>True if toolInfos are not equal</returns>
+		public static bool operator !=(ToolInfo c1, ToolInfo c2)
+		{
+			return !(c1 == c2);
+		}
 
-        /// <summary>
-        /// Hash Code
-        /// </summary>
-        /// <returns>Hash code</returns>
-        public override int GetHashCode()
-        {
-            return name.GetHashCode() ^ guid.GetHashCode() ^ this.fileExtension.GetHashCode() ^ this.importProject.GetHashCode() ^ this.xmlTag.GetHashCode();
+		/// <summary>
+		/// Hash Code
+		/// </summary>
+		/// <returns>Hash code</returns>
+		public override int GetHashCode()
+		{
+			return name.GetHashCode() ^ guid.GetHashCode() ^ this.fileExtension.GetHashCode() ^ this.importProject.GetHashCode() ^ this.xmlTag.GetHashCode();
 
-        }
-    }
+		}
+	}
 }

+ 57 - 57
Prebuild/src/Core/Targets/VS2002Target.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -29,59 +29,59 @@ using Prebuild.Core.Attributes;
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("vs2002")]
-    public class VS2002Target : VS2003Target
-    {
-        #region Private Methods
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("vs2002")]
+	public class VS2002Target : VS2003Target
+	{
+		#region Private Methods
 
-        private void SetVS2002()
-        {
-            this.SolutionVersion = "7.00";
-            this.ProductVersion = "7.0.9254";
-            this.SchemaVersion = "1.0";
-            this.VersionName = "2002";
-            this.Version = VSVersion.VS70;
-        }
+		private void SetVS2002()
+		{
+			this.SolutionVersion = "7.00";
+			this.ProductVersion = "7.0.9254";
+			this.SchemaVersion = "1.0";
+			this.VersionName = "2002";
+			this.Version = VSVersion.VS70;
+		}
 
-        #endregion
+		#endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public override void Write(Kernel kern)
-        {
-            SetVS2002();
-            base.Write(kern);
-        }
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public override void Write(Kernel kern)
+		{
+			SetVS2002();
+			base.Write(kern);
+		}
 
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public override void Clean(Kernel kern)
-        {
-            SetVS2002();
-            base.Clean(kern);
-        }
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public override void Clean(Kernel kern)
+		{
+			SetVS2002();
+			base.Clean(kern);
+		}
 
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public override string Name
-        {
-            get
-            {
-                return "vs2002";
-            }
-        }
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public override string Name
+		{
+			get
+			{
+				return "vs2002";
+			}
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 566 - 566
Prebuild/src/Core/Targets/VS2003Target.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -34,560 +34,560 @@ using Prebuild.Core.Utilities;
 
 namespace Prebuild.Core.Targets
 {
-    [Target("vs2003")]
-    public class VS2003Target : ITarget
-    {
-
-        #region Fields
-
-        string solutionVersion = "8.00";
-        string productVersion = "7.10.3077";
-        string schemaVersion = "2.0";
-        string versionName = "2003";
-        VSVersion version = VSVersion.VS71;
-
-        readonly Dictionary<string, ToolInfo> m_Tools = new Dictionary<string, ToolInfo>();
-        Kernel m_Kernel;
-
-        /// <summary>
-        /// Gets or sets the solution version.
-        /// </summary>
-        /// <value>The solution version.</value>
-        protected string SolutionVersion
-        {
-            get
-            {
-                return solutionVersion;
-            }
-            set
-            {
-                solutionVersion = value;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the product version.
-        /// </summary>
-        /// <value>The product version.</value>
-        protected string ProductVersion
-        {
-            get
-            {
-                return productVersion;
-            }
-            set
-            {
-                productVersion = value;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the schema version.
-        /// </summary>
-        /// <value>The schema version.</value>
-        protected string SchemaVersion
-        {
-            get
-            {
-                return schemaVersion;
-            }
-            set
-            {
-                schemaVersion = value;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the name of the version.
-        /// </summary>
-        /// <value>The name of the version.</value>
-        protected string VersionName
-        {
-            get
-            {
-                return versionName;
-            }
-            set
-            {
-                versionName = value;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        protected VSVersion Version
-        {
-            get
-            {
-                return version;
-            }
-            set
-            {
-                version = value;
-            }
-        }
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="VS2003Target"/> class.
-        /// </summary>
-        public VS2003Target()
-        {
-            m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP");
-            m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic");
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private string MakeRefPath(ProjectNode project)
-        {
-            string ret = "";
-            foreach(ReferencePathNode node in project.ReferencePaths)
-            {
-                try
-                {
-                    string fullPath = Helper.ResolvePath(node.Path);
-                    if(ret.Length < 1)
-                    {
-                        ret = fullPath;
-                    }
-                    else
-                    {
-                        ret += ";" + fullPath;
-                    }
-                }
-                catch(ArgumentException)
-                {
-                    m_Kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
-                }
-            }
-
-            return ret;
-        }
-
-        private void WriteProject(SolutionNode solution, ProjectNode project)
-        {
-            if(!m_Tools.ContainsKey(project.Language))
-            {
-                throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
-            }
-
-            ToolInfo toolInfo = m_Tools[project.Language];
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
-            StreamWriter ps = new StreamWriter(projectFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
-
-            using(ps)
-            {
-                ps.WriteLine("<VisualStudioProject>");
-                ps.WriteLine("    <{0}", toolInfo.XmlTag);
-                ps.WriteLine("\t\t\t\tProjectType = \"Local\"");
-                ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", ProductVersion);
-                ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", SchemaVersion);
-                ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper());
-                ps.WriteLine("\t\t>");
-
-                ps.WriteLine("\t\t\t\t<Build>");
-                ps.WriteLine("            <Settings");
-                ps.WriteLine("\t\t\t\t  ApplicationIcon = \"{0}\"",project.AppIcon);
-                ps.WriteLine("\t\t\t\t  AssemblyKeyContainerName = \"\"");
-                ps.WriteLine("\t\t\t\t  AssemblyName = \"{0}\"", project.AssemblyName);
-                ps.WriteLine("\t\t\t\t  AssemblyOriginatorKeyFile = \"\"");
-                ps.WriteLine("\t\t\t\t  DefaultClientScript = \"JScript\"");
-                ps.WriteLine("\t\t\t\t  DefaultHTMLPageLayout = \"Grid\"");
-                ps.WriteLine("\t\t\t\t  DefaultTargetSchema = \"IE50\"");
-                ps.WriteLine("\t\t\t\t  DelaySign = \"false\"");
-
-                if(Version == VSVersion.VS70)
-                {
-                    ps.WriteLine("\t\t\t\t  NoStandardLibraries = \"false\"");
-                }
-
-                ps.WriteLine("\t\t\t\t  OutputType = \"{0}\"", project.Type);
-
-                foreach(ConfigurationNode conf in project.Configurations)
-                {
-                    if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
-                    {
-                        ps.WriteLine("\t\t\t\t  PreBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
-                    }
-                    else
-                    {
-                        ps.WriteLine("\t\t\t\t  PreBuildEvent = \"{0}\"", conf.Options["PreBuildEvent"]);
-                    }
-                    if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
-                    {
-                        ps.WriteLine("\t\t\t\t  PostBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
-                    }
-                    else
-                    {
-                        ps.WriteLine("\t\t\t\t  PostBuildEvent = \"{0}\"", conf.Options["PostBuildEvent"]);
-                    }
-                    if (conf.Options["RunPostBuildEvent"] == null)
-                    {
-                        ps.WriteLine("\t\t\t\t  RunPostBuildEvent = \"{0}\"", "OnBuildSuccess");
-                    }
-                    else
-                    {
-                        ps.WriteLine("\t\t\t\t  RunPostBuildEvent = \"{0}\"", conf.Options["RunPostBuildEvent"]);
-                    }
-                    break;
-                }
-
-                ps.WriteLine("\t\t\t\t  RootNamespace = \"{0}\"", project.RootNamespace);
-                ps.WriteLine("\t\t\t\t  StartupObject = \"{0}\"", project.StartupObject);
-                ps.WriteLine("\t\t     >");
-
-                foreach(ConfigurationNode conf in project.Configurations)
-                {
-                    ps.WriteLine("\t\t\t\t  <Config");
-                    ps.WriteLine("\t\t\t\t      Name = \"{0}\"", conf.Name);
-                    ps.WriteLine("\t\t\t\t      AllowUnsafeBlocks = \"{0}\"", conf.Options["AllowUnsafe"].ToString().ToLower());
-                    ps.WriteLine("\t\t\t\t      BaseAddress = \"{0}\"", conf.Options["BaseAddress"]);
-                    ps.WriteLine("\t\t\t\t      CheckForOverflowUnderflow = \"{0}\"", conf.Options["CheckUnderflowOverflow"].ToString().ToLower());
-                    ps.WriteLine("\t\t\t\t      ConfigurationOverrideFile = \"\"");
-                    ps.WriteLine("\t\t\t\t      DefineConstants = \"{0}\"", conf.Options["CompilerDefines"]);
-                    ps.WriteLine("\t\t\t\t      DocumentationFile = \"{0}\"", GetXmlDocFile(project, conf));//default to the assembly name
-                    ps.WriteLine("\t\t\t\t      DebugSymbols = \"{0}\"", conf.Options["DebugInformation"].ToString().ToLower());
-                    ps.WriteLine("\t\t\t\t      FileAlignment = \"{0}\"", conf.Options["FileAlignment"]);
-                    ps.WriteLine("\t\t\t\t      IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower());
-
-                    if(Version == VSVersion.VS71)
-                    {
-                        ps.WriteLine("\t\t\t\t      NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower());
-                        ps.WriteLine("\t\t\t\t      NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower());
-                    }
-
-                    ps.WriteLine("\t\t\t\t      Optimize = \"{0}\"", conf.Options["OptimizeCode"].ToString().ToLower());
-                    ps.WriteLine("                    OutputPath = \"{0}\"",
-                        Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
-                    ps.WriteLine("                    RegisterForComInterop = \"{0}\"", conf.Options["RegisterComInterop"].ToString().ToLower());
-                    ps.WriteLine("                    RemoveIntegerChecks = \"{0}\"", conf.Options["RemoveIntegerChecks"].ToString().ToLower());
-                    ps.WriteLine("                    TreatWarningsAsErrors = \"{0}\"", conf.Options["WarningsAsErrors"].ToString().ToLower());
-                    ps.WriteLine("                    WarningLevel = \"{0}\"", conf.Options["WarningLevel"]);
-                    ps.WriteLine("                />");
-                }
-
-                ps.WriteLine("            </Settings>");
-
-                ps.WriteLine("            <References>");
-                foreach(ReferenceNode refr in project.References)
-                {
-                    ps.WriteLine("                <Reference");
-                    ps.WriteLine("                    Name = \"{0}\"", refr.Name);
-                    ps.WriteLine("                    AssemblyName = \"{0}\"", refr.Name);
-
-                    if(solution.ProjectsTable.ContainsKey(refr.Name))
-                    {
-                        ProjectNode refProject = solution.ProjectsTable[refr.Name];
-                        ps.WriteLine("                    Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper());
-                        ps.WriteLine("                    Package = \"{0}\"", toolInfo.Guid.ToUpper());
-                    }
-                    else
-                    {
-                        if(refr.Path != null)
-                        {
-                            ps.WriteLine("                    HintPath = \"{0}\"", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
-                        }
-
-                    }
-
-                    if(refr.LocalCopySpecified)
-                    {
-                        ps.WriteLine("                    Private = \"{0}\"",refr.LocalCopy);
-                    }
-
-                    ps.WriteLine("                />");
-                }
-                ps.WriteLine("            </References>");
-
-                ps.WriteLine("        </Build>");
-                ps.WriteLine("        <Files>");
-
-                ps.WriteLine("            <Include>");
-
-                foreach(string file in project.Files)
-                {
-                    string fileName = file.Replace(".\\", "");
-                    ps.WriteLine("                <File");
-                    ps.WriteLine("                    RelPath = \"{0}\"", fileName);
-                    ps.WriteLine("                    SubType = \"{0}\"", project.Files.GetSubType(file));
-                    ps.WriteLine("                    BuildAction = \"{0}\"", project.Files.GetBuildAction(file));
-                    ps.WriteLine("                />");
-
-                    if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
-                    {
-                        ps.WriteLine("                <File");
-                        ps.WriteLine("                    RelPath = \"{0}\"", fileName.Substring(0, fileName.LastIndexOf('.')) + ".resx");
-                        int slash = fileName.LastIndexOf('\\');
-                        if (slash == -1)
-                        {
-                            ps.WriteLine("                    DependentUpon = \"{0}\"", fileName);
-                        }
-                        else
-                        {
-                            ps.WriteLine("                    DependentUpon = \"{0}\"", fileName.Substring(slash + 1, fileName.Length - slash - 1));
-                        }
-                        ps.WriteLine("                    BuildAction = \"{0}\"", "EmbeddedResource");
-                        ps.WriteLine("                />");
-
-                    }
-                }
-                ps.WriteLine("            </Include>");
-
-                ps.WriteLine("        </Files>");
-                ps.WriteLine("    </{0}>", toolInfo.XmlTag);
-                ps.WriteLine("</VisualStudioProject>");
-            }
-
-            ps = new StreamWriter(projectFile + ".user");
-            using(ps)
-            {
-                ps.WriteLine("<VisualStudioProject>");
-                ps.WriteLine("    <{0}>", toolInfo.XmlTag);
-                ps.WriteLine("        <Build>");
-
-                ps.WriteLine("            <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
-                foreach(ConfigurationNode conf in project.Configurations)
-                {
-                    ps.WriteLine("                <Config");
-                    ps.WriteLine("                    Name = \"{0}\"", conf.Name);
-                    ps.WriteLine("                />");
-                }
-                ps.WriteLine("            </Settings>");
-
-                ps.WriteLine("        </Build>");
-                ps.WriteLine("    </{0}>", toolInfo.XmlTag);
-                ps.WriteLine("</VisualStudioProject>");
-            }
-
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        /// <summary>
-        /// Gets the XML doc file.
-        /// </summary>
-        /// <param name="project">The project.</param>
-        /// <param name="conf">The conf.</param>
-        /// <returns></returns>
-        public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf)
-        {
-            if( conf == null )
-            {
-                throw new ArgumentNullException("conf");
-            }
-            if( project == null )
-            {
-                throw new ArgumentNullException("project");
-            }
-            //			if(!(bool)conf.Options["GenerateXmlDocFile"]) //default to none, if the generate option is false
-            //			{
-            //				return string.Empty;
-            //			}
-
-            //default to "AssemblyName.xml"
-            //string defaultValue = Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
-            //return (string)conf.Options["XmlDocFile", defaultValue];
-
-            //default to no XmlDocFile file
-            return (string)conf.Options["XmlDocFile", ""];
-        }
-
-        private void WriteSolution(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", VersionName);
-
-            foreach(ProjectNode project in solution.Projects)
-            {
-                if(m_Kernel.AllowProject(project.FilterGroups))
-                {
-                    m_Kernel.Log.Write("...Creating project: {0}", project.Name);
-                    WriteProject(solution, project);
-                }
-            }
-
-            m_Kernel.Log.Write("");
-            string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
-            StreamWriter ss = new StreamWriter(solutionFile);
-
-            m_Kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
-
-            using(ss)
-            {
-                ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    if(!m_Tools.ContainsKey(project.Language))
-                    {
-                        throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
-                    }
-
-                    ToolInfo toolInfo = m_Tools[project.Language];
-
-                    string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
-                    ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
-                        toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name,
-                        toolInfo.FileExtension), project.Guid.ToString().ToUpper());
-
-                    ss.WriteLine("\tProjectSection(ProjectDependencies) = postProject");
-                    ss.WriteLine("\tEndProjectSection");
-
-                    ss.WriteLine("EndProject");
-                }
-
-                ss.WriteLine("Global");
-
-                ss.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution");
-                foreach(ConfigurationNode conf in solution.Configurations)
-                {
-                    ss.WriteLine("\t\t{0} = {0}", conf.Name);
-                }
-                ss.WriteLine("\tEndGlobalSection");
-
-                ss.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution");
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    for(int i = 0; i < project.References.Count; i++)
-                    {
-                        ReferenceNode refr = project.References[i];
-                        if(solution.ProjectsTable.ContainsKey(refr.Name))
-                        {
-                            ProjectNode refProject = solution.ProjectsTable[refr.Name];
-                            ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})",
-                                project.Guid.ToString().ToUpper()
-                                , i,
-                                refProject.Guid.ToString().ToUpper()
-                                );
-                        }
-                    }
-                }
-                ss.WriteLine("\tEndGlobalSection");
-
-                ss.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution");
-                foreach(ProjectNode project in solution.Projects)
-                {
-                    foreach(ConfigurationNode conf in solution.Configurations)
-                    {
-                        ss.WriteLine("\t\t{{{0}}}.{1}.ActiveCfg = {1}|.NET",
-                            project.Guid.ToString().ToUpper(),
-                            conf.Name);
-
-                        ss.WriteLine("\t\t{{{0}}}.{1}.Build.0 = {1}|.NET",
-                            project.Guid.ToString().ToUpper(),
-                            conf.Name);
-                    }
-                }
-                ss.WriteLine("\tEndGlobalSection");
-
-                if(solution.Files != null)
-                {
-                    ss.WriteLine("\tGlobalSection(SolutionItems) = postSolution");
-                    foreach(string file in solution.Files)
-                    {
-                        ss.WriteLine("\t\t{0} = {0}", file);
-                    }
-                    ss.WriteLine("\tEndGlobalSection");
-                }
-
-                ss.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
-                ss.WriteLine("\tEndGlobalSection");
-                ss.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution");
-                ss.WriteLine("\tEndGlobalSection");
-
-                ss.WriteLine("EndGlobal");
-            }
-
-            m_Kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void CleanProject(ProjectNode project)
-        {
-            m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
-
-            ToolInfo toolInfo = m_Tools[project.Language];
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
-            string userFile = projectFile + ".user";
-
-            Helper.DeleteIfExists(projectFile);
-            Helper.DeleteIfExists(userFile);
-        }
-
-        private void CleanSolution(SolutionNode solution)
-        {
-            m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", VersionName, solution.Name);
-
-            string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
-            string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
-
-            Helper.DeleteIfExists(slnFile);
-            Helper.DeleteIfExists(suoFile);
-
-            foreach(ProjectNode project in solution.Projects)
-            {
-                CleanProject(project);
-            }
-
-            m_Kernel.Log.Write("");
-        }
-
-        #endregion
-
-        #region ITarget Members
-
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public virtual void Write(Kernel kern)
-        {
-            if( kern == null )
-            {
-                throw new ArgumentNullException("kern");
-            }
-            m_Kernel = kern;
-            foreach(SolutionNode sol in m_Kernel.Solutions)
-            {
-                WriteSolution(sol);
-            }
-            m_Kernel = null;
-        }
-
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public virtual void Clean(Kernel kern)
-        {
-            if( kern == null )
-            {
-                throw new ArgumentNullException("kern");
-            }
-            m_Kernel = kern;
-            foreach(SolutionNode sol in m_Kernel.Solutions)
-            {
-                CleanSolution(sol);
-            }
-            m_Kernel = null;
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public virtual string Name
-        {
-            get
-            {
-                return "vs2003";
-            }
-        }
-
-        #endregion
-    }
+	[Target("vs2003")]
+	public class VS2003Target : ITarget
+	{
+
+		#region Fields
+
+		string solutionVersion = "8.00";
+		string productVersion = "7.10.3077";
+		string schemaVersion = "2.0";
+		string versionName = "2003";
+		VSVersion version = VSVersion.VS71;
+
+	    readonly Dictionary<string, ToolInfo> m_Tools = new Dictionary<string, ToolInfo>();
+		Kernel m_Kernel;
+
+		/// <summary>
+		/// Gets or sets the solution version.
+		/// </summary>
+		/// <value>The solution version.</value>
+		protected string SolutionVersion
+		{
+			get
+			{
+				return solutionVersion;
+			}
+			set
+			{
+				solutionVersion = value;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the product version.
+		/// </summary>
+		/// <value>The product version.</value>
+		protected string ProductVersion
+		{
+			get
+			{
+				return productVersion;
+			}
+			set
+			{
+				productVersion = value;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the schema version.
+		/// </summary>
+		/// <value>The schema version.</value>
+		protected string SchemaVersion
+		{
+			get
+			{
+				return schemaVersion;
+			}
+			set
+			{
+				schemaVersion = value;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the name of the version.
+		/// </summary>
+		/// <value>The name of the version.</value>
+		protected string VersionName
+		{
+			get
+			{
+				return versionName;
+			}
+			set
+			{
+				versionName = value;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		protected VSVersion Version
+		{
+			get
+			{
+				return version;
+			}
+			set
+			{
+				version = value;
+			}
+		}
+
+		#endregion
+
+		#region Constructors
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="VS2003Target"/> class.
+		/// </summary>
+		public VS2003Target()
+		{
+			m_Tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP");
+			m_Tools["VB.NET"] = new ToolInfo("VB.NET", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic");
+		}
+
+		#endregion
+
+		#region Private Methods
+
+		private string MakeRefPath(ProjectNode project)
+		{
+			string ret = "";
+			foreach(ReferencePathNode node in project.ReferencePaths)
+			{
+				try
+				{
+					string fullPath = Helper.ResolvePath(node.Path);
+					if(ret.Length < 1)
+					{
+						ret = fullPath;
+					}
+					else
+					{
+						ret += ";" + fullPath;
+					}
+				}
+				catch(ArgumentException)
+				{
+					m_Kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
+				}
+			}
+
+			return ret;
+		}
+
+		private void WriteProject(SolutionNode solution, ProjectNode project)
+		{
+			if(!m_Tools.ContainsKey(project.Language))
+			{
+				throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
+			}
+
+			ToolInfo toolInfo = m_Tools[project.Language];
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
+			StreamWriter ps = new StreamWriter(projectFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
+
+			using(ps)
+			{
+				ps.WriteLine("<VisualStudioProject>");
+				ps.WriteLine("    <{0}", toolInfo.XmlTag);
+				ps.WriteLine("\t\t\t\tProjectType = \"Local\"");
+				ps.WriteLine("\t\t\t\tProductVersion = \"{0}\"", ProductVersion);
+				ps.WriteLine("\t\t\t\tSchemaVersion = \"{0}\"", SchemaVersion);
+				ps.WriteLine("\t\t\t\tProjectGuid = \"{{{0}}}\"", project.Guid.ToString().ToUpper());
+				ps.WriteLine("\t\t>");
+
+				ps.WriteLine("\t\t\t\t<Build>");
+				ps.WriteLine("            <Settings");
+				ps.WriteLine("\t\t\t\t  ApplicationIcon = \"{0}\"",project.AppIcon);
+				ps.WriteLine("\t\t\t\t  AssemblyKeyContainerName = \"\"");
+				ps.WriteLine("\t\t\t\t  AssemblyName = \"{0}\"", project.AssemblyName);
+				ps.WriteLine("\t\t\t\t  AssemblyOriginatorKeyFile = \"\"");
+				ps.WriteLine("\t\t\t\t  DefaultClientScript = \"JScript\"");
+				ps.WriteLine("\t\t\t\t  DefaultHTMLPageLayout = \"Grid\"");
+				ps.WriteLine("\t\t\t\t  DefaultTargetSchema = \"IE50\"");
+				ps.WriteLine("\t\t\t\t  DelaySign = \"false\"");
+
+				if(Version == VSVersion.VS70)
+				{
+					ps.WriteLine("\t\t\t\t  NoStandardLibraries = \"false\"");
+				}
+
+				ps.WriteLine("\t\t\t\t  OutputType = \"{0}\"", project.Type);
+
+				foreach(ConfigurationNode conf in project.Configurations)
+				{
+					if (conf.Options["PreBuildEvent"] != null && conf.Options["PreBuildEvent"].ToString().Length != 0)
+					{
+						ps.WriteLine("\t\t\t\t  PreBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PreBuildEvent"].ToString()));
+					}
+					else
+					{
+						ps.WriteLine("\t\t\t\t  PreBuildEvent = \"{0}\"", conf.Options["PreBuildEvent"]);
+					}
+					if (conf.Options["PostBuildEvent"] != null && conf.Options["PostBuildEvent"].ToString().Length != 0)
+					{
+						ps.WriteLine("\t\t\t\t  PostBuildEvent = \"{0}\"", Helper.NormalizePath(conf.Options["PostBuildEvent"].ToString()));
+					}
+					else
+					{
+						ps.WriteLine("\t\t\t\t  PostBuildEvent = \"{0}\"", conf.Options["PostBuildEvent"]);
+					}
+					if (conf.Options["RunPostBuildEvent"] == null)
+					{
+						ps.WriteLine("\t\t\t\t  RunPostBuildEvent = \"{0}\"", "OnBuildSuccess");
+					}
+					else
+					{
+						ps.WriteLine("\t\t\t\t  RunPostBuildEvent = \"{0}\"", conf.Options["RunPostBuildEvent"]);
+					}
+					break;
+				}
+				
+				ps.WriteLine("\t\t\t\t  RootNamespace = \"{0}\"", project.RootNamespace);
+				ps.WriteLine("\t\t\t\t  StartupObject = \"{0}\"", project.StartupObject);
+				ps.WriteLine("\t\t     >");
+
+				foreach(ConfigurationNode conf in project.Configurations)
+				{
+					ps.WriteLine("\t\t\t\t  <Config");
+					ps.WriteLine("\t\t\t\t      Name = \"{0}\"", conf.Name);
+					ps.WriteLine("\t\t\t\t      AllowUnsafeBlocks = \"{0}\"", conf.Options["AllowUnsafe"].ToString().ToLower());
+					ps.WriteLine("\t\t\t\t      BaseAddress = \"{0}\"", conf.Options["BaseAddress"]);
+					ps.WriteLine("\t\t\t\t      CheckForOverflowUnderflow = \"{0}\"", conf.Options["CheckUnderflowOverflow"].ToString().ToLower());
+					ps.WriteLine("\t\t\t\t      ConfigurationOverrideFile = \"\"");
+					ps.WriteLine("\t\t\t\t      DefineConstants = \"{0}\"", conf.Options["CompilerDefines"]);
+					ps.WriteLine("\t\t\t\t      DocumentationFile = \"{0}\"", GetXmlDocFile(project, conf));//default to the assembly name
+					ps.WriteLine("\t\t\t\t      DebugSymbols = \"{0}\"", conf.Options["DebugInformation"].ToString().ToLower());
+					ps.WriteLine("\t\t\t\t      FileAlignment = \"{0}\"", conf.Options["FileAlignment"]);
+					ps.WriteLine("\t\t\t\t      IncrementalBuild = \"{0}\"", conf.Options["IncrementalBuild"].ToString().ToLower());
+                    
+					if(Version == VSVersion.VS71)
+					{
+						ps.WriteLine("\t\t\t\t      NoStdLib = \"{0}\"", conf.Options["NoStdLib"].ToString().ToLower());
+						ps.WriteLine("\t\t\t\t      NoWarn = \"{0}\"", conf.Options["SuppressWarnings"].ToString().ToLower());
+					}
+
+					ps.WriteLine("\t\t\t\t      Optimize = \"{0}\"", conf.Options["OptimizeCode"].ToString().ToLower());       
+					ps.WriteLine("                    OutputPath = \"{0}\"", 
+						Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
+					ps.WriteLine("                    RegisterForComInterop = \"{0}\"", conf.Options["RegisterComInterop"].ToString().ToLower());
+					ps.WriteLine("                    RemoveIntegerChecks = \"{0}\"", conf.Options["RemoveIntegerChecks"].ToString().ToLower());
+					ps.WriteLine("                    TreatWarningsAsErrors = \"{0}\"", conf.Options["WarningsAsErrors"].ToString().ToLower());
+					ps.WriteLine("                    WarningLevel = \"{0}\"", conf.Options["WarningLevel"]);
+					ps.WriteLine("                />");
+				}
+
+				ps.WriteLine("            </Settings>");
+
+				ps.WriteLine("            <References>");
+				foreach(ReferenceNode refr in project.References)
+				{
+					ps.WriteLine("                <Reference");
+					ps.WriteLine("                    Name = \"{0}\"", refr.Name);
+					ps.WriteLine("                    AssemblyName = \"{0}\"", refr.Name);
+
+					if(solution.ProjectsTable.ContainsKey(refr.Name))
+					{
+						ProjectNode refProject = solution.ProjectsTable[refr.Name];
+						ps.WriteLine("                    Project = \"{{{0}}}\"", refProject.Guid.ToString().ToUpper());
+						ps.WriteLine("                    Package = \"{0}\"", toolInfo.Guid.ToUpper());
+					}
+					else
+					{
+						if(refr.Path != null)
+						{
+							ps.WriteLine("                    HintPath = \"{0}\"", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
+						}
+
+					}
+                    
+					if(refr.LocalCopySpecified)
+					{
+						ps.WriteLine("                    Private = \"{0}\"",refr.LocalCopy);
+					}
+
+					ps.WriteLine("                />");
+				}
+				ps.WriteLine("            </References>");
+
+				ps.WriteLine("        </Build>");
+				ps.WriteLine("        <Files>");
+                
+				ps.WriteLine("            <Include>");
+
+				foreach(string file in project.Files)
+				{
+					string fileName = file.Replace(".\\", "");
+					ps.WriteLine("                <File");
+					ps.WriteLine("                    RelPath = \"{0}\"", fileName);
+					ps.WriteLine("                    SubType = \"{0}\"", project.Files.GetSubType(file));
+					ps.WriteLine("                    BuildAction = \"{0}\"", project.Files.GetBuildAction(file));
+					ps.WriteLine("                />");
+
+					if (project.Files.GetSubType(file) != SubType.Code && project.Files.GetSubType(file) != SubType.Settings)
+					{
+						ps.WriteLine("                <File");
+						ps.WriteLine("                    RelPath = \"{0}\"", fileName.Substring(0, fileName.LastIndexOf('.')) + ".resx");
+						int slash = fileName.LastIndexOf('\\');
+						if (slash == -1)
+						{
+							ps.WriteLine("                    DependentUpon = \"{0}\"", fileName);
+						}
+						else
+						{
+							ps.WriteLine("                    DependentUpon = \"{0}\"", fileName.Substring(slash + 1, fileName.Length - slash - 1));
+						}
+						ps.WriteLine("                    BuildAction = \"{0}\"", "EmbeddedResource");
+						ps.WriteLine("                />");
+
+					}
+				}
+				ps.WriteLine("            </Include>");
+                
+				ps.WriteLine("        </Files>");
+				ps.WriteLine("    </{0}>", toolInfo.XmlTag);
+				ps.WriteLine("</VisualStudioProject>");
+			}
+
+			ps = new StreamWriter(projectFile + ".user");
+			using(ps)
+			{
+				ps.WriteLine("<VisualStudioProject>");
+				ps.WriteLine("    <{0}>", toolInfo.XmlTag);
+				ps.WriteLine("        <Build>");
+
+				ps.WriteLine("            <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
+				foreach(ConfigurationNode conf in project.Configurations)
+				{
+					ps.WriteLine("                <Config");
+					ps.WriteLine("                    Name = \"{0}\"", conf.Name);
+					ps.WriteLine("                />");
+				}
+				ps.WriteLine("            </Settings>");
+
+				ps.WriteLine("        </Build>");
+				ps.WriteLine("    </{0}>", toolInfo.XmlTag);
+				ps.WriteLine("</VisualStudioProject>");
+			}
+
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		/// <summary>
+		/// Gets the XML doc file.
+		/// </summary>
+		/// <param name="project">The project.</param>
+		/// <param name="conf">The conf.</param>
+		/// <returns></returns>
+		public static string GetXmlDocFile(ProjectNode project, ConfigurationNode conf) 
+		{
+			if( conf == null )
+			{
+				throw new ArgumentNullException("conf");
+			}
+			if( project == null )
+			{
+				throw new ArgumentNullException("project");
+			}
+			//			if(!(bool)conf.Options["GenerateXmlDocFile"]) //default to none, if the generate option is false
+			//			{
+			//				return string.Empty;
+			//			}
+
+			//default to "AssemblyName.xml"
+			//string defaultValue = Path.GetFileNameWithoutExtension(project.AssemblyName) + ".xml";
+			//return (string)conf.Options["XmlDocFile", defaultValue];
+
+			//default to no XmlDocFile file
+			return (string)conf.Options["XmlDocFile", ""];
+		}
+
+		private void WriteSolution(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Creating Visual Studio {0} solution and project files", VersionName);
+
+			foreach(ProjectNode project in solution.Projects)
+			{
+				if(m_Kernel.AllowProject(project.FilterGroups)) 
+				{
+					m_Kernel.Log.Write("...Creating project: {0}", project.Name);
+					WriteProject(solution, project);
+				}
+			}
+
+			m_Kernel.Log.Write("");
+			string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
+			StreamWriter ss = new StreamWriter(solutionFile);
+
+			m_Kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
+            
+			using(ss)
+			{
+				ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
+				foreach(ProjectNode project in solution.Projects)
+				{
+					if(!m_Tools.ContainsKey(project.Language))
+					{
+						throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
+					}
+
+					ToolInfo toolInfo = m_Tools[project.Language];
+                
+					string path = Helper.MakePathRelativeTo(solution.FullPath, project.FullPath);
+					ss.WriteLine("Project(\"{0}\") = \"{1}\", \"{2}\", \"{{{3}}}\"",
+						toolInfo.Guid, project.Name, Helper.MakeFilePath(path, project.Name,
+						toolInfo.FileExtension), project.Guid.ToString().ToUpper());
+
+					ss.WriteLine("\tProjectSection(ProjectDependencies) = postProject");
+					ss.WriteLine("\tEndProjectSection");
+
+					ss.WriteLine("EndProject");
+				}
+
+				ss.WriteLine("Global");
+
+				ss.WriteLine("\tGlobalSection(SolutionConfiguration) = preSolution");
+				foreach(ConfigurationNode conf in solution.Configurations)
+				{
+					ss.WriteLine("\t\t{0} = {0}", conf.Name);
+				}
+				ss.WriteLine("\tEndGlobalSection");
+
+				ss.WriteLine("\tGlobalSection(ProjectDependencies) = postSolution");
+				foreach(ProjectNode project in solution.Projects)
+				{
+					for(int i = 0; i < project.References.Count; i++)
+					{
+						ReferenceNode refr = project.References[i];
+						if(solution.ProjectsTable.ContainsKey(refr.Name))
+						{
+							ProjectNode refProject = solution.ProjectsTable[refr.Name];
+							ss.WriteLine("\t\t({{{0}}}).{1} = ({{{2}}})", 
+								project.Guid.ToString().ToUpper()
+								, i, 
+								refProject.Guid.ToString().ToUpper()
+								);
+						}
+					}
+				}
+				ss.WriteLine("\tEndGlobalSection");
+
+				ss.WriteLine("\tGlobalSection(ProjectConfiguration) = postSolution");
+				foreach(ProjectNode project in solution.Projects)
+				{
+					foreach(ConfigurationNode conf in solution.Configurations)
+					{
+						ss.WriteLine("\t\t{{{0}}}.{1}.ActiveCfg = {1}|.NET",
+							project.Guid.ToString().ToUpper(),
+							conf.Name);
+
+						ss.WriteLine("\t\t{{{0}}}.{1}.Build.0 = {1}|.NET",
+							project.Guid.ToString().ToUpper(),
+							conf.Name);
+					}
+				}
+				ss.WriteLine("\tEndGlobalSection");
+
+				if(solution.Files != null)
+				{
+					ss.WriteLine("\tGlobalSection(SolutionItems) = postSolution");
+					foreach(string file in solution.Files)
+					{
+						ss.WriteLine("\t\t{0} = {0}", file);
+					}
+					ss.WriteLine("\tEndGlobalSection");
+				}
+
+				ss.WriteLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
+				ss.WriteLine("\tEndGlobalSection");
+				ss.WriteLine("\tGlobalSection(ExtensibilityAddIns) = postSolution");
+				ss.WriteLine("\tEndGlobalSection");
+
+				ss.WriteLine("EndGlobal");
+			}
+
+			m_Kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void CleanProject(ProjectNode project)
+		{
+			m_Kernel.Log.Write("...Cleaning project: {0}", project.Name);
+
+			ToolInfo toolInfo = m_Tools[project.Language];
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
+			string userFile = projectFile + ".user";
+            
+			Helper.DeleteIfExists(projectFile);
+			Helper.DeleteIfExists(userFile);
+		}
+
+		private void CleanSolution(SolutionNode solution)
+		{
+			m_Kernel.Log.Write("Cleaning Visual Studio {0} solution and project files", VersionName, solution.Name);
+
+			string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
+			string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
+            
+			Helper.DeleteIfExists(slnFile);
+			Helper.DeleteIfExists(suoFile);
+
+			foreach(ProjectNode project in solution.Projects)
+			{
+				CleanProject(project);
+			}
+
+			m_Kernel.Log.Write("");
+		}
+
+		#endregion
+
+		#region ITarget Members
+
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public virtual void Write(Kernel kern)
+		{
+			if( kern == null )
+			{
+				throw new ArgumentNullException("kern");
+			}
+			m_Kernel = kern;
+			foreach(SolutionNode sol in m_Kernel.Solutions)
+			{
+				WriteSolution(sol);
+			}
+			m_Kernel = null;
+		}
+
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public virtual void Clean(Kernel kern)
+		{
+			if( kern == null )
+			{
+				throw new ArgumentNullException("kern");
+			}
+			m_Kernel = kern;
+			foreach(SolutionNode sol in m_Kernel.Solutions)
+			{
+				CleanSolution(sol);
+			}
+			m_Kernel = null;
+		}
+
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public virtual string Name
+		{
+			get
+			{
+				return "vs2003";
+			}
+		}
+
+		#endregion
+	}
 }

+ 13 - 13
Prebuild/src/Core/Targets/VS2005Target.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004 Matthew Holmes ([email protected])
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -35,7 +35,7 @@ using Prebuild.Core.Utilities;
 namespace Prebuild.Core.Targets
 {
     /// <summary>
-    ///
+    /// 
     /// </summary>
     [Target("vs2005")]
     public class VS2005Target : VSGenericTarget
@@ -137,9 +137,9 @@ namespace Prebuild.Core.Targets
         /// <summary>
         /// Initializes a new instance of the <see cref="VS2005Target"/> class.
         /// </summary>
-        public VS2005Target()
+        public VS2005Target() 
             : base()
-        {
+        {          
         }
 
         #endregion

+ 90 - 90
Prebuild/src/Core/Targets/VS2008Target.cs

@@ -11,86 +11,86 @@ using System.CodeDom.Compiler;
 namespace Prebuild.Core.Targets
 {
 
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("vs2008")]
-    public class VS2008Target : VSGenericTarget
-    {
-        #region Fields
-        string solutionVersion = "10.00";
-        string productVersion = "9.0.21022";
-        string schemaVersion = "2.0";
-        string versionName = "Visual Studio 2008";
-        string name = "vs2008";
-        VSVersion version = VSVersion.VS90;
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("vs2008")]
+	public class VS2008Target : VSGenericTarget
+	{
+		#region Fields
+		string solutionVersion = "10.00";
+		string productVersion = "9.0.21022";
+		string schemaVersion = "2.0";
+		string versionName = "Visual Studio 2008";
+		string name = "vs2008";
+		VSVersion version = VSVersion.VS90;
 
-        /// <summary>
-        /// Gets or sets the solution version.
-        /// </summary>
-        /// <value>The solution version.</value>
-        public override string SolutionVersion
-        {
-            get
-            {
-                return solutionVersion;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the product version.
-        /// </summary>
-        /// <value>The product version.</value>
-        public override string ProductVersion
-        {
-            get
-            {
-                return productVersion;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the schema version.
-        /// </summary>
-        /// <value>The schema version.</value>
-        public override string SchemaVersion
-        {
-            get
-            {
-                return schemaVersion;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the name of the version.
-        /// </summary>
-        /// <value>The name of the version.</value>
-        public override string VersionName
-        {
-            get
-            {
-                return versionName;
-            }
-        }
-        /// <summary>
-        /// Gets or sets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        public override VSVersion Version
-        {
-            get
-            {
-                return version;
-            }
-        }
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public override string Name
-        {
-            get
-            {
-                return name;
-            }
-        }
+		/// <summary>
+		/// Gets or sets the solution version.
+		/// </summary>
+		/// <value>The solution version.</value>
+		public override string SolutionVersion
+		{
+			get
+			{
+				return solutionVersion;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the product version.
+		/// </summary>
+		/// <value>The product version.</value>
+		public override string ProductVersion
+		{
+			get
+			{
+				return productVersion;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the schema version.
+		/// </summary>
+		/// <value>The schema version.</value>
+		public override string SchemaVersion
+		{
+			get
+			{
+				return schemaVersion;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the name of the version.
+		/// </summary>
+		/// <value>The name of the version.</value>
+		public override string VersionName
+		{
+			get
+			{
+				return versionName;
+			}
+		}
+		/// <summary>
+		/// Gets or sets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		public override VSVersion Version
+		{
+			get
+			{
+				return version;
+			}
+		}
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public override string Name
+		{
+			get
+			{
+				return name;
+			}
+		}
 
         protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
         {
@@ -110,18 +110,18 @@ namespace Prebuild.Core.Targets
             get { return "# Visual Studio 2008"; }
         }
 
-        #endregion
+	    #endregion
 
-        #region Constructors
+		#region Constructors
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="VS2005Target"/> class.
-        /// </summary>
-        public VS2008Target()
-            : base()
-        {
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="VS2005Target"/> class.
+		/// </summary>
+		public VS2008Target()
+			: base()
+		{
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 102 - 102
Prebuild/src/Core/Targets/VS2010Target.cs

@@ -11,96 +11,96 @@ using System.CodeDom.Compiler;
 namespace Prebuild.Core.Targets
 {
 
-    /// <summary>
-    ///
-    /// </summary>
-    [Target("vs2010")]
-    public class VS2010Target : VSGenericTarget
-    {
-        #region Fields
-
-        string solutionVersion = "11.00";
-        string productVersion = "9.0.30729";
-        string schemaVersion = "2.0";
-        string versionName = "Visual Studio 2010";
-        string name = "vs2010";
-        VSVersion version = VSVersion.VS10;
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets or sets the solution version.
-        /// </summary>
-        /// <value>The solution version.</value>
-        public override string SolutionVersion
-        {
-            get
-            {
-                return solutionVersion;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the product version.
-        /// </summary>
-        /// <value>The product version.</value>
-        public override string ProductVersion
-        {
-            get
-            {
-                return productVersion;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the schema version.
-        /// </summary>
-        /// <value>The schema version.</value>
-        public override string SchemaVersion
-        {
-            get
-            {
-                return schemaVersion;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the name of the version.
-        /// </summary>
-        /// <value>The name of the version.</value>
-        public override string VersionName
-        {
-            get
-            {
-                return versionName;
-            }
-        }
-
-        /// <summary>
-        /// Gets or sets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        public override VSVersion Version
-        {
-            get
-            {
-                return version;
-            }
-        }
-
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public override string Name
-        {
-            get
-            {
-                return name;
-            }
-        }
+	/// <summary>
+	/// 
+	/// </summary>
+	[Target("vs2010")]
+	public class VS2010Target : VSGenericTarget
+	{
+		#region Fields
+		
+		string solutionVersion = "11.00";
+		string productVersion = "9.0.30729";
+		string schemaVersion = "2.0";
+		string versionName = "Visual Studio 2010";
+		string name = "vs2010";
+		VSVersion version = VSVersion.VS10;
+
+		#endregion
+		
+		#region Properties
+		
+		/// <summary>
+		/// Gets or sets the solution version.
+		/// </summary>
+		/// <value>The solution version.</value>
+		public override string SolutionVersion
+		{
+			get
+			{
+				return solutionVersion;
+			}
+		}
+		
+		/// <summary>
+		/// Gets or sets the product version.
+		/// </summary>
+		/// <value>The product version.</value>
+		public override string ProductVersion
+		{
+			get
+			{
+				return productVersion;
+			}
+		}
+		
+		/// <summary>
+		/// Gets or sets the schema version.
+		/// </summary>
+		/// <value>The schema version.</value>
+		public override string SchemaVersion
+		{
+			get
+			{
+				return schemaVersion;
+			}
+		}
+		
+		/// <summary>
+		/// Gets or sets the name of the version.
+		/// </summary>
+		/// <value>The name of the version.</value>
+		public override string VersionName
+		{
+			get
+			{
+				return versionName;
+			}
+		}
+		
+		/// <summary>
+		/// Gets or sets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		public override VSVersion Version
+		{
+			get
+			{
+				return version;
+			}
+		}
+		
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public override string Name
+		{
+			get
+			{
+				return name;
+			}
+		}
 
         protected override string GetToolsVersionXml(FrameworkVersion frameworkVersion)
         {
@@ -110,7 +110,7 @@ namespace Prebuild.Core.Targets
                 case FrameworkVersion.v4_5:
                 case FrameworkVersion.v4_0:
                 case FrameworkVersion.v3_5:
-                    return "ToolsVersion=\"4.0\"";
+            		return "ToolsVersion=\"4.0\"";
                 case FrameworkVersion.v3_0:
                     return "ToolsVersion=\"3.0\"";
                 default:
@@ -123,18 +123,18 @@ namespace Prebuild.Core.Targets
             get { return "# Visual Studio 2010"; }
         }
 
-        #endregion
+	    #endregion
 
-        #region Constructors
+		#region Constructors
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="VS2005Target"/> class.
-        /// </summary>
-        public VS2010Target()
-            : base()
-        {
-        }
+		/// <summary>
+		/// Initializes a new instance of the <see cref="VS2005Target"/> class.
+		/// </summary>
+		public VS2010Target()
+			: base()
+		{
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 886 - 880
Prebuild/src/Core/Targets/VSGenericTarget.cs

@@ -35,141 +35,141 @@ using System.CodeDom.Compiler;
 namespace Prebuild.Core.Targets
 {
 
-    /// <summary>
-    ///
-    /// </summary>
-    public abstract class VSGenericTarget : ITarget
-    {
-        #region Fields
-
-        readonly Dictionary<string, ToolInfo> tools = new Dictionary<string, ToolInfo>();
+	/// <summary>
+	/// 
+	/// </summary>
+	public abstract class VSGenericTarget : ITarget
+	{
+		#region Fields
+
+		readonly Dictionary<string, ToolInfo> tools = new Dictionary<string, ToolInfo>();
 //        NameValueCollection CopyFiles = new NameValueCollection();
-        Kernel kernel;
-        #endregion
-
-        #region Properties
-        /// <summary>
-        /// Gets or sets the solution version.
-        /// </summary>
-        /// <value>The solution version.</value>
-        public abstract string SolutionVersion { get; }
-        /// <summary>
-        /// Gets or sets the product version.
-        /// </summary>
-        /// <value>The product version.</value>
-        public abstract string ProductVersion { get; }
-        /// <summary>
-        /// Gets or sets the schema version.
-        /// </summary>
-        /// <value>The schema version.</value>
-        public abstract string SchemaVersion { get; }
-        /// <summary>
-        /// Gets or sets the name of the version.
-        /// </summary>
-        /// <value>The name of the version.</value>
-        public abstract string VersionName { get; }
-        /// <summary>
-        /// Gets or sets the version.
-        /// </summary>
-        /// <value>The version.</value>
-        public abstract VSVersion Version { get; }
-        /// <summary>
-        /// Gets the name.
-        /// </summary>
-        /// <value>The name.</value>
-        public abstract string Name { get; }
-
-        protected abstract string GetToolsVersionXml(FrameworkVersion version);
-        public abstract string SolutionTag { get; }
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="VSGenericTarget"/> class.
-        /// </summary>
-        protected VSGenericTarget()
-        {
-            tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
-            tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN");
-            tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
-            tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
-            tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null);
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private string MakeRefPath(ProjectNode project)
-        {
-            string ret = "";
-            foreach (ReferencePathNode node in project.ReferencePaths)
-            {
-                try
-                {
-                    string fullPath = Helper.ResolvePath(node.Path);
-                    if (ret.Length < 1)
-                    {
-                        ret = fullPath;
-                    }
-                    else
-                    {
-                        ret += ";" + fullPath;
-                    }
-                }
-                catch (ArgumentException)
-                {
-                    kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
-                }
-            }
-
-            return ret;
-        }
-
-        private static ProjectNode FindProjectInSolution(string name, SolutionNode solution)
-        {
-            SolutionNode node = solution;
-
-            while (node.Parent is SolutionNode)
-                node = node.Parent as SolutionNode;
-
-            return FindProjectInSolutionRecursively(name, node);
-        }
-
-        private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution)
-        {
-            if (solution.ProjectsTable.ContainsKey(name))
-                return solution.ProjectsTable[name];
-
-            foreach (SolutionNode child in solution.Solutions)
-            {
-                ProjectNode node = FindProjectInSolutionRecursively(name, child);
-                if (node != null)
-                    return node;
-            }
-
-            return null;
-        }
-
-        private void WriteProject(SolutionNode solution, ProjectNode project)
-        {
-            if (!tools.ContainsKey(project.Language))
-            {
-                throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
-            }
-
-            ToolInfo toolInfo = tools[project.Language];
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
-            StreamWriter ps = new StreamWriter(projectFile);
-
-            kernel.CurrentWorkingDirectory.Push();
-            Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
-
-            #region Project File
-            using (ps)
-            {
+		Kernel kernel;
+		#endregion
+
+		#region Properties
+		/// <summary>
+		/// Gets or sets the solution version.
+		/// </summary>
+		/// <value>The solution version.</value>
+		public abstract string SolutionVersion { get; }
+		/// <summary>
+		/// Gets or sets the product version.
+		/// </summary>
+		/// <value>The product version.</value>
+		public abstract string ProductVersion { get; }
+		/// <summary>
+		/// Gets or sets the schema version.
+		/// </summary>
+		/// <value>The schema version.</value>
+		public abstract string SchemaVersion { get; }
+		/// <summary>
+		/// Gets or sets the name of the version.
+		/// </summary>
+		/// <value>The name of the version.</value>
+		public abstract string VersionName { get; }
+		/// <summary>
+		/// Gets or sets the version.
+		/// </summary>
+		/// <value>The version.</value>
+		public abstract VSVersion Version { get; }
+		/// <summary>
+		/// Gets the name.
+		/// </summary>
+		/// <value>The name.</value>
+		public abstract string Name { get; }
+
+		protected abstract string GetToolsVersionXml(FrameworkVersion version);
+		public abstract string SolutionTag { get; }
+
+		#endregion
+
+		#region Constructors
+
+		/// <summary>
+		/// Initializes a new instance of the <see cref="VSGenericTarget"/> class.
+		/// </summary>
+		protected VSGenericTarget()
+		{
+			tools["C#"] = new ToolInfo("C#", "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}", "csproj", "CSHARP", "$(MSBuildBinPath)\\Microsoft.CSHARP.Targets");
+			tools["Database"] = new ToolInfo("Database", "{4F174C21-8C12-11D0-8340-0000F80270F8}", "dbp", "UNKNOWN");
+			tools["Boo"] = new ToolInfo("Boo", "{45CEA7DC-C2ED-48A6-ACE0-E16144C02365}", "booproj", "Boo", "$(BooBinPath)\\Boo.Microsoft.Build.targets");
+			tools["VisualBasic"] = new ToolInfo("VisualBasic", "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}", "vbproj", "VisualBasic", "$(MSBuildBinPath)\\Microsoft.VisualBasic.Targets");
+			tools["Folder"] = new ToolInfo("Folder", "{2150E333-8FDC-42A3-9474-1A3956D46DE8}", null, null);
+		}
+
+		#endregion
+
+		#region Private Methods
+
+		private string MakeRefPath(ProjectNode project)
+		{
+			string ret = "";
+			foreach (ReferencePathNode node in project.ReferencePaths)
+			{
+				try
+				{
+					string fullPath = Helper.ResolvePath(node.Path);
+					if (ret.Length < 1)
+					{
+						ret = fullPath;
+					}
+					else
+					{
+						ret += ";" + fullPath;
+					}
+				}
+				catch (ArgumentException)
+				{
+					kernel.Log.Write(LogType.Warning, "Could not resolve reference path: {0}", node.Path);
+				}
+			}
+
+			return ret;
+		}
+
+		private static ProjectNode FindProjectInSolution(string name, SolutionNode solution)
+		{
+			SolutionNode node = solution;
+
+			while (node.Parent is SolutionNode)
+				node = node.Parent as SolutionNode;
+
+			return FindProjectInSolutionRecursively(name, node);
+		}
+
+		private static ProjectNode FindProjectInSolutionRecursively(string name, SolutionNode solution)
+		{
+			if (solution.ProjectsTable.ContainsKey(name))
+				return solution.ProjectsTable[name];
+
+			foreach (SolutionNode child in solution.Solutions)
+			{
+				ProjectNode node = FindProjectInSolutionRecursively(name, child);
+				if (node != null)
+					return node;
+			}
+
+			return null;
+		}
+
+		private void WriteProject(SolutionNode solution, ProjectNode project)
+		{
+			if (!tools.ContainsKey(project.Language))
+			{
+				throw new UnknownLanguageException("Unknown .NET language: " + project.Language);
+			}
+
+			ToolInfo toolInfo = tools[project.Language];
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
+			StreamWriter ps = new StreamWriter(projectFile);
+
+			kernel.CurrentWorkingDirectory.Push();
+			Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
+
+			#region Project File
+			using (ps)
+			{
                 string targets = "";
 
                 if(project.Files.CopyFiles > 0)
@@ -177,347 +177,353 @@ namespace Prebuild.Core.Targets
                 else
                     targets = "Build";
 
-                ps.WriteLine("<Project DefaultTargets=\"{0}\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" {1}>", targets, GetToolsVersionXml(project.FrameworkVersion));
-                ps.WriteLine("	<PropertyGroup>");
-                ps.WriteLine("	  <ProjectType>Local</ProjectType>");
-                ps.WriteLine("	  <ProductVersion>{0}</ProductVersion>", ProductVersion);
-                ps.WriteLine("	  <SchemaVersion>{0}</SchemaVersion>", SchemaVersion);
-                ps.WriteLine("	  <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper());
-
-                // Visual Studio has a hard coded guid for the project type
-                if (project.Type == ProjectType.Web)
-                    ps.WriteLine("	  <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>");
-                ps.WriteLine("	  <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
-                ps.WriteLine("	  <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon);
-                ps.WriteLine("	  <AssemblyKeyContainerName>");
-                ps.WriteLine("	  </AssemblyKeyContainerName>");
-                ps.WriteLine("	  <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
-                foreach (ConfigurationNode conf in project.Configurations)
+				ps.WriteLine("<Project DefaultTargets=\"{0}\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" {1}>", targets, GetToolsVersionXml(project.FrameworkVersion));
+				ps.WriteLine("	<PropertyGroup>");
+				ps.WriteLine("	  <ProjectType>Local</ProjectType>");
+				ps.WriteLine("	  <ProductVersion>{0}</ProductVersion>", ProductVersion);
+				ps.WriteLine("	  <SchemaVersion>{0}</SchemaVersion>", SchemaVersion);
+				ps.WriteLine("	  <ProjectGuid>{{{0}}}</ProjectGuid>", project.Guid.ToString().ToUpper());
+
+				// Visual Studio has a hard coded guid for the project type
+				if (project.Type == ProjectType.Web)
+					ps.WriteLine("	  <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>");
+				ps.WriteLine("	  <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>");
+				ps.WriteLine("	  <ApplicationIcon>{0}</ApplicationIcon>", project.AppIcon);
+				ps.WriteLine("	  <AssemblyKeyContainerName>");
+				ps.WriteLine("	  </AssemblyKeyContainerName>");
+				ps.WriteLine("	  <AssemblyName>{0}</AssemblyName>", project.AssemblyName);
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					if (conf.Options.KeyFile != "")
+					{
+						ps.WriteLine("	  <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile);
+						ps.WriteLine("	  <SignAssembly>true</SignAssembly>");
+						break;
+					}
+				}
+				ps.WriteLine("	  <DefaultClientScript>JScript</DefaultClientScript>");
+				ps.WriteLine("	  <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>");
+				ps.WriteLine("	  <DefaultTargetSchema>IE50</DefaultTargetSchema>");
+				ps.WriteLine("	  <DelaySign>false</DelaySign>");
+				ps.WriteLine("	  <TargetFrameworkVersion>{0}</TargetFrameworkVersion>", project.FrameworkVersion.ToString().Replace("_", "."));
+
+				ps.WriteLine("	  <OutputType>{0}</OutputType>", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString());
+				ps.WriteLine("	  <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder);
+				ps.WriteLine("	  <RootNamespace>{0}</RootNamespace>", project.RootNamespace);
+				ps.WriteLine("	  <StartupObject>{0}</StartupObject>", project.StartupObject);
+				if (string.IsNullOrEmpty(project.DebugStartParameters))
+				{
+					ps.WriteLine("	  <StartArguments>{0}</StartArguments>", project.DebugStartParameters);
+				}
+				ps.WriteLine("	  <FileUpgradeFlags>");
+				ps.WriteLine("	  </FileUpgradeFlags>");
+
+				ps.WriteLine("	</PropertyGroup>");
+                if (!string.IsNullOrEmpty(project.ApplicationManifest))
                 {
-                    if (conf.Options.KeyFile != "")
-                    {
-                        ps.WriteLine("	  <AssemblyOriginatorKeyFile>{0}</AssemblyOriginatorKeyFile>", conf.Options.KeyFile);
-                        ps.WriteLine("	  <SignAssembly>true</SignAssembly>");
-                        break;
-                    }
-                }
-                ps.WriteLine("	  <DefaultClientScript>JScript</DefaultClientScript>");
-                ps.WriteLine("	  <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>");
-                ps.WriteLine("	  <DefaultTargetSchema>IE50</DefaultTargetSchema>");
-                ps.WriteLine("	  <DelaySign>false</DelaySign>");
-                ps.WriteLine("	  <TargetFrameworkVersion>{0}</TargetFrameworkVersion>", project.FrameworkVersion.ToString().Replace("_", "."));
-
-                ps.WriteLine("	  <OutputType>{0}</OutputType>", project.Type == ProjectType.Web ? ProjectType.Library.ToString() : project.Type.ToString());
-                ps.WriteLine("	  <AppDesignerFolder>{0}</AppDesignerFolder>", project.DesignerFolder);
-                ps.WriteLine("	  <RootNamespace>{0}</RootNamespace>", project.RootNamespace);
-                ps.WriteLine("	  <StartupObject>{0}</StartupObject>", project.StartupObject);
-                if (string.IsNullOrEmpty(project.DebugStartParameters))
-                {
-                    ps.WriteLine("	  <StartArguments>{0}</StartArguments>", project.DebugStartParameters);
-                }
-                ps.WriteLine("	  <FileUpgradeFlags>");
-                ps.WriteLine("	  </FileUpgradeFlags>");
-
-                ps.WriteLine("	</PropertyGroup>");
-
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    ps.Write("	<PropertyGroup ");
-                    ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|{1}' \">", conf.Name, conf.Platform);
-                    ps.WriteLine("	  <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]);
-                    ps.WriteLine("	  <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]);
-                    ps.WriteLine("	  <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]);
-                    ps.WriteLine("	  <ConfigurationOverrideFile>");
-                    ps.WriteLine("	  </ConfigurationOverrideFile>");
-                    ps.WriteLine("	  <DefineConstants>{0}</DefineConstants>", conf.Options["CompilerDefines"]);
-                    ps.WriteLine("	  <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString()));
-                    ps.WriteLine("	  <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]);
-                    ps.WriteLine("	  <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]);
-                    ps.WriteLine("	  <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]);
-                    if (project.Type != ProjectType.Web)
-                        ps.WriteLine("	  <OutputPath>{0}</OutputPath>",
-                                     Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
-                    else
-                        ps.WriteLine("	  <OutputPath>{0}</OutputPath>",
-                                     Helper.EndPath(Helper.NormalizePath("bin\\")));
-
-                    ps.WriteLine("	  <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]);
-                    ps.WriteLine("	  <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]);
-                    ps.WriteLine("	  <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]);
-                    ps.WriteLine("	  <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]);
-                    ps.WriteLine("	  <NoStdLib>{0}</NoStdLib>", conf.Options["NoStdLib"]);
-                    ps.WriteLine("	  <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]);
-                    ps.WriteLine("	  <PlatformTarget>{0}</PlatformTarget>", conf.Platform);
+                    ps.WriteLine("	<PropertyGroup>");
+                    ps.WriteLine("	  <ApplicationManifest>" + project.ApplicationManifest + "</ApplicationManifest>");
                     ps.WriteLine("	</PropertyGroup>");
                 }
-
-                //ps.WriteLine("	  </Settings>");
-
-                Dictionary<ReferenceNode, ProjectNode> projectReferences = new Dictionary<ReferenceNode, ProjectNode>();
-                List<ReferenceNode> otherReferences = new List<ReferenceNode>();
-
-                foreach (ReferenceNode refr in project.References)
-                {
-                    ProjectNode projectNode = FindProjectInSolution(refr.Name, solution);
-
-                    if (projectNode == null)
-                        otherReferences.Add(refr);
-                    else
-                        projectReferences.Add(refr, projectNode);
-                }
-                // Assembly References
-                ps.WriteLine("	<ItemGroup>");
-
-                foreach (ReferenceNode refr in otherReferences)
-                {
-                    ps.Write("	  <Reference");
-                    ps.Write(" Include=\"");
-                    ps.Write(refr.Name);
-                    ps.WriteLine("\" >");
-                    ps.Write("		  <Name>");
-                    ps.Write(refr.Name);
-                    ps.WriteLine("</Name>");
-
-                    if(!String.IsNullOrEmpty(refr.Path))
-                    {
-                        // Use absolute path to assembly (for determining assembly type)
-                        string absolutePath = Path.Combine(project.FullPath, refr.Path);
-                        if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "exe"))) {
-                            // Assembly is an executable (exe)
-                            ps.WriteLine("		<HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "exe"));
-                        } else if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "dll"))) {
-                            // Assembly is an library (dll)
-                            ps.WriteLine("		<HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
-                        } else {
-                            string referencePath = Helper.MakeFilePath(refr.Path, refr.Name, "dll");
-                            kernel.Log.Write(LogType.Warning, "Reference \"{0}\": The specified file doesn't exist.", referencePath);
-                            ps.WriteLine("		<HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
-                        }
-                    }
-
-                    ps.WriteLine("		<Private>{0}</Private>", refr.LocalCopy);
-                    ps.WriteLine("	  </Reference>");
-                }
-                ps.WriteLine("	</ItemGroup>");
-
-                //Project References
-                ps.WriteLine("	<ItemGroup>");
-                foreach (KeyValuePair<ReferenceNode, ProjectNode> pair in projectReferences)
-                {
-                    ToolInfo tool = tools[pair.Value.Language];
-                    if (tools == null)
-                        throw new UnknownLanguageException();
-
-                    string path =
-                        Helper.MakePathRelativeTo(project.FullPath,
-                                                  Helper.MakeFilePath(pair.Value.FullPath, pair.Value.Name, tool.FileExtension));
-                    ps.WriteLine("	  <ProjectReference Include=\"{0}\">", path);
-
-                    // TODO: Allow reference to visual basic projects
-                    ps.WriteLine("		<Name>{0}</Name>", pair.Value.Name);
-                    ps.WriteLine("		<Project>{0}</Project>", pair.Value.Guid.ToString("B").ToUpper());
-                    ps.WriteLine("		<Package>{0}</Package>", tool.Guid.ToUpper());
-
-                    //This is the Copy Local flag in VS
-                    ps.WriteLine("		<Private>{0}</Private>", pair.Key.LocalCopy);
-
-                    ps.WriteLine("	  </ProjectReference>");
-                }
-                ps.WriteLine("	</ItemGroup>");
-
-                //				  ps.WriteLine("	</Build>");
-                ps.WriteLine("	<ItemGroup>");
-
-                //				  ps.WriteLine("	  <Include>");
-                List<string> list = new List<string>();
-
-                foreach (string path in project.Files)
-                {
-                    string lower = path.ToLower();
-                    if (lower.EndsWith(".resx"))
-                    {
-                        string codebehind = String.Format("{0}.Designer{1}", path.Substring(0, path.LastIndexOf('.')), toolInfo.LanguageExtension);
-                        if (!list.Contains(codebehind))
-                            list.Add(codebehind);
-                    }
-
-                }
-
-
-                foreach (string filePath in project.Files)
-                {
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					ps.Write("	<PropertyGroup ");
+					ps.WriteLine("Condition=\" '$(Configuration)|$(Platform)' == '{0}|{1}' \">", conf.Name, conf.Platform);
+					ps.WriteLine("	  <AllowUnsafeBlocks>{0}</AllowUnsafeBlocks>", conf.Options["AllowUnsafe"]);
+					ps.WriteLine("	  <BaseAddress>{0}</BaseAddress>", conf.Options["BaseAddress"]);
+					ps.WriteLine("	  <CheckForOverflowUnderflow>{0}</CheckForOverflowUnderflow>", conf.Options["CheckUnderflowOverflow"]);
+					ps.WriteLine("	  <ConfigurationOverrideFile>");
+					ps.WriteLine("	  </ConfigurationOverrideFile>");
+					ps.WriteLine("	  <DefineConstants>{0}</DefineConstants>",
+                        conf.Options["CompilerDefines"] == "" ? this.kernel.ForcedConditionals : conf.Options["CompilerDefines"] + ";" + kernel.ForcedConditionals);
+					ps.WriteLine("	  <DocumentationFile>{0}</DocumentationFile>", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString()));
+					ps.WriteLine("	  <DebugSymbols>{0}</DebugSymbols>", conf.Options["DebugInformation"]);
+					ps.WriteLine("	  <FileAlignment>{0}</FileAlignment>", conf.Options["FileAlignment"]);
+					ps.WriteLine("	  <Optimize>{0}</Optimize>", conf.Options["OptimizeCode"]);
+					if (project.Type != ProjectType.Web)
+						ps.WriteLine("	  <OutputPath>{0}</OutputPath>",
+						             Helper.EndPath(Helper.NormalizePath(conf.Options["OutputPath"].ToString())));
+					else
+						ps.WriteLine("	  <OutputPath>{0}</OutputPath>",
+						             Helper.EndPath(Helper.NormalizePath("bin\\")));
+
+					ps.WriteLine("	  <RegisterForComInterop>{0}</RegisterForComInterop>", conf.Options["RegisterComInterop"]);
+					ps.WriteLine("	  <RemoveIntegerChecks>{0}</RemoveIntegerChecks>", conf.Options["RemoveIntegerChecks"]);
+					ps.WriteLine("	  <TreatWarningsAsErrors>{0}</TreatWarningsAsErrors>", conf.Options["WarningsAsErrors"]);
+					ps.WriteLine("	  <WarningLevel>{0}</WarningLevel>", conf.Options["WarningLevel"]);
+					ps.WriteLine("	  <NoStdLib>{0}</NoStdLib>", conf.Options["NoStdLib"]);
+					ps.WriteLine("	  <NoWarn>{0}</NoWarn>", conf.Options["SuppressWarnings"]);
+					ps.WriteLine("	  <PlatformTarget>{0}</PlatformTarget>", conf.Platform);
+					ps.WriteLine("	</PropertyGroup>");
+				}
+
+				//ps.WriteLine("	  </Settings>");
+
+				Dictionary<ReferenceNode, ProjectNode> projectReferences = new Dictionary<ReferenceNode, ProjectNode>();
+				List<ReferenceNode> otherReferences = new List<ReferenceNode>();
+
+				foreach (ReferenceNode refr in project.References)
+				{
+					ProjectNode projectNode = FindProjectInSolution(refr.Name, solution);
+
+					if (projectNode == null)
+						otherReferences.Add(refr);
+					else
+						projectReferences.Add(refr, projectNode);
+				}
+				// Assembly References
+				ps.WriteLine("	<ItemGroup>");
+
+				foreach (ReferenceNode refr in otherReferences)
+				{
+					ps.Write("	  <Reference");
+					ps.Write(" Include=\"");
+					ps.Write(refr.Name);
+					ps.WriteLine("\" >");
+					ps.Write("		  <Name>");
+					ps.Write(refr.Name);
+					ps.WriteLine("</Name>");
+										
+					if(!String.IsNullOrEmpty(refr.Path))
+					{
+						// Use absolute path to assembly (for determining assembly type)
+						string absolutePath = Path.Combine(project.FullPath, refr.Path);
+						if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "exe"))) {
+							// Assembly is an executable (exe)
+							ps.WriteLine("		<HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "exe"));
+						} else if(File.Exists(Helper.MakeFilePath(absolutePath, refr.Name, "dll"))) {
+							// Assembly is an library (dll)							
+							ps.WriteLine("		<HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
+						} else {
+							string referencePath = Helper.MakeFilePath(refr.Path, refr.Name, "dll");
+							kernel.Log.Write(LogType.Warning, "Reference \"{0}\": The specified file doesn't exist.", referencePath);
+							ps.WriteLine("		<HintPath>{0}</HintPath>", Helper.MakeFilePath(refr.Path, refr.Name, "dll"));
+						}
+					}
+					
+					ps.WriteLine("		<Private>{0}</Private>", refr.LocalCopy);
+					ps.WriteLine("	  </Reference>");
+				}
+				ps.WriteLine("	</ItemGroup>");
+
+				//Project References
+				ps.WriteLine("	<ItemGroup>");
+				foreach (KeyValuePair<ReferenceNode, ProjectNode> pair in projectReferences)
+				{
+					ToolInfo tool = tools[pair.Value.Language];
+					if (tools == null)
+						throw new UnknownLanguageException();
+
+					string path =
+						Helper.MakePathRelativeTo(project.FullPath,
+						                          Helper.MakeFilePath(pair.Value.FullPath, pair.Value.Name, tool.FileExtension));
+					ps.WriteLine("	  <ProjectReference Include=\"{0}\">", path);
+
+					// TODO: Allow reference to visual basic projects
+					ps.WriteLine("		<Name>{0}</Name>", pair.Value.Name);
+					ps.WriteLine("		<Project>{0}</Project>", pair.Value.Guid.ToString("B").ToUpper());
+					ps.WriteLine("		<Package>{0}</Package>", tool.Guid.ToUpper());
+
+					//This is the Copy Local flag in VS
+					ps.WriteLine("		<Private>{0}</Private>", pair.Key.LocalCopy);
+
+					ps.WriteLine("	  </ProjectReference>");
+				}
+				ps.WriteLine("	</ItemGroup>");
+
+				//				  ps.WriteLine("	</Build>");
+				ps.WriteLine("	<ItemGroup>");
+
+				//				  ps.WriteLine("	  <Include>");
+				List<string> list = new List<string>();
+
+				foreach (string path in project.Files)
+				{
+					string lower = path.ToLower();
+					if (lower.EndsWith(".resx"))
+					{
+						string codebehind = String.Format("{0}.Designer{1}", path.Substring(0, path.LastIndexOf('.')), toolInfo.LanguageExtension);
+						if (!list.Contains(codebehind))
+							list.Add(codebehind);
+					}
+
+				}
+
+
+				foreach (string filePath in project.Files)
+				{
                     // Add the filePath with the destination as the key
                     // will use it later to form the copy parameters with Include lists
                     // for each destination
                     if (project.Files.GetBuildAction(filePath) == BuildAction.Copy)
                         continue;
-                    //					if (file == "Properties\\Bind.Designer.cs")
-                    //					{
-                    //						Console.WriteLine("Wait a minute!");
-                    //						Console.WriteLine(project.Files.GetSubType(file).ToString());
-                    //					}
-                    SubType subType = project.Files.GetSubType(filePath);
-
-                    // Visual Studio chokes on file names if forward slash is used as a path separator
-                    // instead of backslash.  So we must make sure that all file paths written to the
-                    // project file use \ as a path separator.
-                    string file = filePath.Replace(@"/", @"\");
-
-                    if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer
-                        && subType != SubType.CodeBehind)
-                    {
-                        ps.WriteLine("	  <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
-                        ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file));
-                        ps.WriteLine("		<SubType>Designer</SubType>");
-                        ps.WriteLine("	  </EmbeddedResource>");
-                        //
-                    }
-
-                    if (subType == SubType.Designer)
-                    {
-                        ps.WriteLine("	  <EmbeddedResource Include=\"{0}\">", file);
-
-                        string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs";
-                        string dependent_name = filePath.Substring(0, file.LastIndexOf('.')) + ".cs";
-
-                        // Check for a parent .cs file with the same name as this designer file
-                        if (File.Exists(Helper.NormalizePath(dependent_name)))
-                        {
-                            ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
-                        }
-                        else
-                        {
-                            ps.WriteLine("		<Generator>ResXFileCodeGenerator</Generator>");
-                            ps.WriteLine("		<LastGenOutput>{0}</LastGenOutput>", Path.GetFileName(autogen_name));
-                            ps.WriteLine("		<SubType>" + subType + "</SubType>");
-                        }
-
-                        ps.WriteLine("	  </EmbeddedResource>");
-                        if (File.Exists(Helper.NormalizePath(autogen_name)))
-                        {
-                            ps.WriteLine("	  <Compile Include=\"{0}\">", autogen_name);
-                            //ps.WriteLine("	  <DesignTime>True</DesignTime>");
-
-                            // If a parent .cs file exists, link this autogen file to it. Otherwise link
-                            // to the designer file
-                            if (File.Exists(dependent_name))
-                            {
-                                ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
-                            }
-                            else
-                            {
-                                ps.WriteLine("		<AutoGen>True</AutoGen>");
-                                ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(filePath));
-                            }
-
-                            ps.WriteLine("	  </Compile>");
-                        }
-                        list.Add(autogen_name);
-                    }
-                    if (subType == SubType.Settings)
-                    {
-                        ps.Write("	  <{0} ", project.Files.GetBuildAction(filePath));
-                        ps.WriteLine("Include=\"{0}\">", file);
-                        string fileName = Path.GetFileName(filePath);
-                        if (project.Files.GetBuildAction(filePath) == BuildAction.None)
-                        {
-                            ps.WriteLine("		<Generator>SettingsSingleFileGenerator</Generator>");
-                            ps.WriteLine("		<LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
-                        }
-                        else
-                        {
-                            ps.WriteLine("		<SubType>Code</SubType>");
-                            ps.WriteLine("		<AutoGen>True</AutoGen>");
-                            ps.WriteLine("		<DesignTimeSharedInput>True</DesignTimeSharedInput>");
-                            string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
-                            string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
-                            ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(fileNameShorter + ".settings"));
-                        }
-                        ps.WriteLine("	  </{0}>", project.Files.GetBuildAction(filePath));
-                    }
-                    else if (subType != SubType.Designer)
-                    {
-                        string path = Helper.NormalizePath(file);
-                        string path_lower = path.ToLower();
-
-                        if (!list.Contains(filePath))
-                        {
-                            ps.Write("	  <{0} ", project.Files.GetBuildAction(filePath));
-
-                            int startPos = 0;
-                            if (project.Files.GetPreservePath(filePath))
-                            {
-                                while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1)
-                                    startPos++;
-
-                            }
-                            else
-                            {
-                                startPos = file.LastIndexOf(Path.GetFileName(path));
-                            }
-
-                            // be sure to write out the path with backslashes so VS recognizes
-                            // the file properly.
-                            ps.WriteLine("Include=\"{0}\">", file);
-
-                            int last_period_index = file.LastIndexOf('.');
+					//					if (file == "Properties\\Bind.Designer.cs")
+					//					{
+					//						Console.WriteLine("Wait a minute!");
+					//						Console.WriteLine(project.Files.GetSubType(file).ToString());
+					//					}
+					SubType subType = project.Files.GetSubType(filePath);
+					
+					// Visual Studio chokes on file names if forward slash is used as a path separator
+					// instead of backslash.  So we must make sure that all file paths written to the
+					// project file use \ as a path separator.
+					string file = filePath.Replace(@"/", @"\");
+
+					if (subType != SubType.Code && subType != SubType.Settings && subType != SubType.Designer
+					    && subType != SubType.CodeBehind)
+					{
+						ps.WriteLine("	  <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
+						ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file));
+						ps.WriteLine("		<SubType>Designer</SubType>");
+						ps.WriteLine("	  </EmbeddedResource>");
+						//
+					}
+
+					if (subType == SubType.Designer)
+					{
+						ps.WriteLine("	  <EmbeddedResource Include=\"{0}\">", file);
+						
+						string autogen_name = file.Substring(0, file.LastIndexOf('.')) + ".Designer.cs";
+						string dependent_name = filePath.Substring(0, file.LastIndexOf('.')) + ".cs";
+
+						// Check for a parent .cs file with the same name as this designer file
+						if (File.Exists(Helper.NormalizePath(dependent_name)))
+						{
+							ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
+						}
+						else
+						{
+							ps.WriteLine("		<Generator>ResXFileCodeGenerator</Generator>");
+							ps.WriteLine("		<LastGenOutput>{0}</LastGenOutput>", Path.GetFileName(autogen_name));
+							ps.WriteLine("		<SubType>" + subType + "</SubType>");
+						}
+						
+						ps.WriteLine("	  </EmbeddedResource>");
+						if (File.Exists(Helper.NormalizePath(autogen_name)))
+						{
+							ps.WriteLine("	  <Compile Include=\"{0}\">", autogen_name);
+							//ps.WriteLine("	  <DesignTime>True</DesignTime>");
+
+							// If a parent .cs file exists, link this autogen file to it. Otherwise link
+							// to the designer file
+							if (File.Exists(dependent_name))
+							{
+								ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(dependent_name));
+							}
+							else
+							{
+								ps.WriteLine("		<AutoGen>True</AutoGen>");
+								ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(filePath));
+							}
+							
+							ps.WriteLine("	  </Compile>");
+						}
+						list.Add(autogen_name);
+					}
+					if (subType == SubType.Settings)
+					{
+						ps.Write("	  <{0} ", project.Files.GetBuildAction(filePath));
+						ps.WriteLine("Include=\"{0}\">", file);
+						string fileName = Path.GetFileName(filePath);
+						if (project.Files.GetBuildAction(filePath) == BuildAction.None)
+						{
+							ps.WriteLine("		<Generator>SettingsSingleFileGenerator</Generator>");
+							ps.WriteLine("		<LastGenOutput>{0}</LastGenOutput>", fileName.Substring(0, fileName.LastIndexOf('.')) + ".Designer.cs");
+						}
+						else
+						{
+							ps.WriteLine("		<SubType>Code</SubType>");
+							ps.WriteLine("		<AutoGen>True</AutoGen>");
+							ps.WriteLine("		<DesignTimeSharedInput>True</DesignTimeSharedInput>");
+							string fileNameShort = fileName.Substring(0, fileName.LastIndexOf('.'));
+							string fileNameShorter = fileNameShort.Substring(0, fileNameShort.LastIndexOf('.'));
+							ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(fileNameShorter + ".settings"));
+						}
+						ps.WriteLine("	  </{0}>", project.Files.GetBuildAction(filePath));
+					}
+					else if (subType != SubType.Designer)
+					{
+						string path = Helper.NormalizePath(file);
+						string path_lower = path.ToLower();
+
+						if (!list.Contains(filePath))
+						{
+							ps.Write("	  <{0} ", project.Files.GetBuildAction(filePath));
+
+							int startPos = 0;
+							if (project.Files.GetPreservePath(filePath))
+							{
+								while ((@"./\").IndexOf(file.Substring(startPos, 1)) != -1)
+									startPos++;
+
+							}
+							else
+							{
+								startPos = file.LastIndexOf(Path.GetFileName(path));
+							}
+							
+							// be sure to write out the path with backslashes so VS recognizes
+							// the file properly.
+							ps.WriteLine("Include=\"{0}\">", file);
+
+							int last_period_index = file.LastIndexOf('.');
                             string short_file_name = (last_period_index >= 0)
                                 ? file.Substring(0, last_period_index)
                                 : file;
-                            string extension = Path.GetExtension(path);
-                            // make this upper case, so that when File.Exists tests for the
-                            // existence of a designer file on a case-sensitive platform,
-                            // it is correctly identified.
-                            string designer_format = string.Format(".Designer{0}", extension);
-
-                            if (path_lower.EndsWith(designer_format.ToLowerInvariant()))
-                            {
-                                int designer_index = path.IndexOf(designer_format);
-                                string file_name = path.Substring(0, designer_index);
-
-                                // There are two corrections to the next lines:
-                                // 1. Fix the connection between a designer file and a form
-                                //	  or usercontrol that don't have an associated resx file.
-                                // 2. Connect settings files to associated designer files.
-                                if (File.Exists(file_name + extension))
-                                    ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + extension));
-                                else if (File.Exists(file_name + ".resx"))
-                                    ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".resx"));
-                                else if (File.Exists(file_name + ".settings"))
-                                {
-                                    ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".settings"));
-                                    ps.WriteLine("		<AutoGen>True</AutoGen>");
-                                    ps.WriteLine("		<DesignTimeSharedInput>True</DesignTimeSharedInput>");
-                                }
-                            }
-                            else if (subType == SubType.CodeBehind)
-                            {
-                                ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(short_file_name));
-                            }
-                            if (project.Files.GetIsLink(filePath))
-                            {
-                                string alias = project.Files.GetLinkPath(filePath);
-                                alias += file.Substring(startPos);
-                                alias = Helper.NormalizePath(alias);
-                                ps.WriteLine("		<Link>{0}</Link>", alias);
-                            }
-                            else if (project.Files.GetBuildAction(filePath) != BuildAction.None)
-                            {
-                                if (project.Files.GetBuildAction(filePath) != BuildAction.EmbeddedResource)
-                                {
-                                    ps.WriteLine("		<SubType>{0}</SubType>", subType);
-                                }
-                            }
-
-                            if (project.Files.GetCopyToOutput(filePath) != CopyToOutput.Never)
-                            {
-                                ps.WriteLine("		<CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(filePath));
-                            }
-
-                            ps.WriteLine("	  </{0}>", project.Files.GetBuildAction(filePath));
-                        }
-                    }
-                }
+							string extension = Path.GetExtension(path);
+							// make this upper case, so that when File.Exists tests for the
+							// existence of a designer file on a case-sensitive platform,
+							// it is correctly identified.
+							string designer_format = string.Format(".Designer{0}", extension);
+
+							if (path_lower.EndsWith(designer_format.ToLowerInvariant()))
+							{
+								int designer_index = path.IndexOf(designer_format);
+								string file_name = path.Substring(0, designer_index);
+
+								// There are two corrections to the next lines:
+								// 1. Fix the connection between a designer file and a form
+								//	  or usercontrol that don't have an associated resx file.
+								// 2. Connect settings files to associated designer files.
+								if (File.Exists(file_name + extension))
+									ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + extension));
+								else if (File.Exists(file_name + ".resx"))
+									ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".resx"));
+								else if (File.Exists(file_name + ".settings"))
+								{
+									ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(file_name + ".settings"));
+									ps.WriteLine("		<AutoGen>True</AutoGen>");
+									ps.WriteLine("		<DesignTimeSharedInput>True</DesignTimeSharedInput>");
+								}
+							}
+							else if (subType == SubType.CodeBehind)
+							{
+								ps.WriteLine("		<DependentUpon>{0}</DependentUpon>", Path.GetFileName(short_file_name));
+							}
+							if (project.Files.GetIsLink(filePath))
+							{
+								string alias = project.Files.GetLinkPath(filePath);
+								alias += file.Substring(startPos);
+								alias = Helper.NormalizePath(alias);
+								ps.WriteLine("		<Link>{0}</Link>", alias);
+							}
+							else if (project.Files.GetBuildAction(filePath) != BuildAction.None)
+							{
+								if (project.Files.GetBuildAction(filePath) != BuildAction.EmbeddedResource)
+								{
+									ps.WriteLine("		<SubType>{0}</SubType>", subType);
+								}
+							}
+
+							if (project.Files.GetCopyToOutput(filePath) != CopyToOutput.Never)
+							{
+								ps.WriteLine("		<CopyToOutputDirectory>{0}</CopyToOutputDirectory>", project.Files.GetCopyToOutput(filePath));
+							}
+
+							ps.WriteLine("	  </{0}>", project.Files.GetBuildAction(filePath));
+						}
+					}
+				}
                 ps.WriteLine("  </ItemGroup>");
 
                 /*
@@ -553,420 +559,420 @@ namespace Prebuild.Core.Targets
                     ps.WriteLine("  </Target>");
                 }
 
-                ps.WriteLine("	<Import Project=\"" + toolInfo.ImportProject + "\" />");
-                ps.WriteLine("	<PropertyGroup>");
-                ps.WriteLine("	  <PreBuildEvent>");
-                ps.WriteLine("	  </PreBuildEvent>");
-                ps.WriteLine("	  <PostBuildEvent>");
-                ps.WriteLine("	  </PostBuildEvent>");
-                ps.WriteLine("	</PropertyGroup>");
-                ps.WriteLine("</Project>");
-            }
-            #endregion
-
-            #region User File
-
-            ps = new StreamWriter(projectFile + ".user");
-            using (ps)
-            {
-                // Get the first configuration from the project.
-                ConfigurationNode firstConfiguration = null;
-
-                if (project.Configurations.Count > 0)
-                {
-                    firstConfiguration = project.Configurations[0];
-                }
-
-                ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
-                //ps.WriteLine( "<VisualStudioProject>" );
-                //ps.WriteLine("  <{0}>", toolInfo.XMLTag);
-                //ps.WriteLine("	<Build>");
-                ps.WriteLine("	<PropertyGroup>");
-                //ps.WriteLine("	  <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
-
-                if (firstConfiguration != null)
-                {
-                    ps.WriteLine("	  <Configuration Condition=\" '$(Configuration)' == '' \">{0}</Configuration>", firstConfiguration.Name);
-                    ps.WriteLine("	  <Platform Condition=\" '$(Platform)' == '' \">{0}</Platform>", firstConfiguration.Platform);
-                }
-
-                ps.WriteLine("	  <ReferencePath>{0}</ReferencePath>", MakeRefPath(project));
-                ps.WriteLine("	  <LastOpenVersion>{0}</LastOpenVersion>", ProductVersion);
-                ps.WriteLine("	  <ProjectView>ProjectFiles</ProjectView>");
-                ps.WriteLine("	  <ProjectTrust>0</ProjectTrust>");
-                ps.WriteLine("	</PropertyGroup>");
-                foreach (ConfigurationNode conf in project.Configurations)
-                {
-                    ps.Write("	<PropertyGroup");
-                    ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|{1}' \"", conf.Name, conf.Platform);
-                    ps.WriteLine(" />");
-                }
-                ps.WriteLine("</Project>");
-            }
-            #endregion
-
-            kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk)
-        {
-            kernel.Log.Write("Creating {0} solution and project files", VersionName);
-
-            foreach (SolutionNode child in solution.Solutions)
-            {
-                kernel.Log.Write("...Creating folder: {0}", child.Name);
-                WriteSolution(child, false);
-            }
-
-            foreach (ProjectNode project in solution.Projects)
-            {
-                kernel.Log.Write("...Creating project: {0}", project.Name);
-                WriteProject(solution, project);
-            }
-
-            foreach (DatabaseProjectNode project in solution.DatabaseProjects)
-            {
-                kernel.Log.Write("...Creating database project: {0}", project.Name);
-                WriteDatabaseProject(solution, project);
-            }
-
-            if (writeSolutionToDisk) // only write main solution
-            {
-                kernel.Log.Write("");
-                string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
-
-                using (StreamWriter ss = new StreamWriter(solutionFile))
-                {
-                    kernel.CurrentWorkingDirectory.Push();
-                    Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
-
-                    ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
-                    ss.WriteLine(SolutionTag);
-
-                    WriteProjectDeclarations(ss, solution, solution);
-
-                    ss.WriteLine("Global");
-
-                    ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
-                    foreach (ConfigurationNode conf in solution.Configurations)
-                    {
-                        ss.WriteLine("\t\t{0} = {0}", conf.NameAndPlatform);
-                    }
-                    ss.WriteLine("\tEndGlobalSection");
-
-                    ss.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
-                    WriteConfigurationLines(solution.Configurations, solution, ss);
-                    ss.WriteLine("\tEndGlobalSection");
-
-                    if (solution.Solutions.Count > 0)
-                    {
-                        ss.WriteLine("\tGlobalSection(NestedProjects) = preSolution");
-                        foreach (SolutionNode embeddedSolution in solution.Solutions)
-                        {
-                            WriteNestedProjectMap(ss, embeddedSolution);
-                        }
-                        ss.WriteLine("\tEndGlobalSection");
-                    }
-
-                    ss.WriteLine("EndGlobal");
-                }
-
-                kernel.CurrentWorkingDirectory.Pop();
-            }
-        }
-
-        private void WriteProjectDeclarations(TextWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution)
-        {
-            foreach (SolutionNode childSolution in embeddedSolution.Solutions)
-            {
-                WriteEmbeddedSolution(writer, childSolution);
-                WriteProjectDeclarations(writer, actualSolution, childSolution);
-            }
-
-            foreach (ProjectNode project in embeddedSolution.Projects)
-            {
-                WriteProject(actualSolution, writer, project);
-            }
-
-            foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
-            {
-                WriteProject(actualSolution, writer, dbProject);
-            }
-
-            if (actualSolution.Guid == embeddedSolution.Guid)
-            {
-                WriteSolutionFiles(actualSolution, writer);
-            }
-        }
-
-        private static void WriteNestedProjectMap(TextWriter writer, SolutionNode embeddedSolution)
-        {
-            foreach (ProjectNode project in embeddedSolution.Projects)
-            {
-                WriteNestedProject(writer, embeddedSolution, project.Guid);
-            }
-
-            foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
-            {
-                WriteNestedProject(writer, embeddedSolution, dbProject.Guid);
-            }
-
-            foreach (SolutionNode child in embeddedSolution.Solutions)
-            {
-                WriteNestedProject(writer, embeddedSolution, child.Guid);
-                WriteNestedProjectMap(writer, child);
-            }
-        }
-
-        private static void WriteNestedProject(TextWriter writer, SolutionNode solution, Guid projectGuid)
-        {
-            WriteNestedFolder(writer, solution.Guid, projectGuid);
-        }
-
-        private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid)
-        {
-            writer.WriteLine("\t\t{0} = {1}",
-                             childGuid.ToString("B").ToUpper(),
-                             parentGuid.ToString("B").ToUpper());
-        }
-
-        private static void WriteConfigurationLines(IEnumerable<ConfigurationNode> configurations, SolutionNode solution, TextWriter ss)
-        {
-            foreach (ProjectNode project in solution.Projects)
-            {
-                foreach (ConfigurationNode conf in configurations)
-                {
-                    ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}",
-                                 project.Guid.ToString("B").ToUpper(),
-                                 conf.NameAndPlatform);
-
-                    ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}",
-                                 project.Guid.ToString("B").ToUpper(),
-                                 conf.NameAndPlatform);
-                }
-            }
-
-            foreach (SolutionNode child in solution.Solutions)
-            {
-                WriteConfigurationLines(configurations, child, ss);
-            }
-        }
-
-        private void WriteSolutionFiles(SolutionNode solution, TextWriter ss)
-        {
-            if(solution.Files != null && solution.Files.Count > 0)
-                WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
-        }
-
-        private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution)
-        {
-            WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files);
-        }
-
-        private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project)
-        {
-            WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath);
-        }
-
-        private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject)
-        {
-            if (solution.Files != null && solution.Files.Count > 0)
-                WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath);
-        }
-
-        const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\"";
-        const string ProjectDeclarationEndFormat = "EndProject";
-
-        private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath)
-        {
-            if (!tools.ContainsKey(language))
-                throw new UnknownLanguageException("Unknown .NET language: " + language);
-
-            ToolInfo toolInfo = tools[language];
-
-            string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath);
-
-            path = Helper.MakeFilePath(path, name, toolInfo.FileExtension);
-
-            WriteProject(ss, language, guid, name, path);
-        }
-
-        private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location)
-        {
-            WriteProject(writer, language, projectGuid, name, location, null);
-        }
-
-        private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files)
-        {
-            if (!tools.ContainsKey(language))
-                throw new UnknownLanguageException("Unknown .NET language: " + language);
-
-            ToolInfo toolInfo = tools[language];
-
-            writer.WriteLine(ProjectDeclarationBeginFormat,
-                             toolInfo.Guid,
-                             name,
-                             location,
-                             projectGuid.ToString("B").ToUpper());
-
-            if (files != null)
-            {
-                writer.WriteLine("\tProjectSection(SolutionItems) = preProject");
-
-                foreach (string file in files)
-                    writer.WriteLine("\t\t{0} = {0}", file);
-
-                writer.WriteLine("\tEndProjectSection");
-            }
-
-            writer.WriteLine(ProjectDeclarationEndFormat);
-        }
-
-        private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project)
-        {
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp");
-            IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), "	  ");
-
-            kernel.CurrentWorkingDirectory.Push();
-
-            Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
-
-            using (ps)
-            {
-                ps.WriteLine("# Microsoft Developer Studio Project File - Database Project");
-                ps.WriteLine("Begin DataProject = \"{0}\"", project.Name);
-                ps.Indent++;
-                ps.WriteLine("MSDTVersion = \"80\"");
-                // TODO: Use the project.Files property
-                if (ContainsSqlFiles(Path.GetDirectoryName(projectFile)))
-                    WriteDatabaseFoldersAndFiles(ps, Path.GetDirectoryName(projectFile));
-
-                ps.WriteLine("Begin DBRefFolder = \"Database References\"");
-                ps.Indent++;
-                foreach (DatabaseReferenceNode reference in project.References)
-                {
-                    ps.WriteLine("Begin DBRefNode = \"{0}\"", reference.Name);
-                    ps.Indent++;
-                    ps.WriteLine("ConnectStr = \"{0}\"", reference.ConnectionString);
-                    ps.WriteLine("Provider = \"{0}\"", reference.ProviderId.ToString("B").ToUpper());
-                    //ps.WriteLine("Colorizer = 5");
-                    ps.Indent--;
-                    ps.WriteLine("End");
-                }
-                ps.Indent--;
-                ps.WriteLine("End");
-                ps.Indent--;
-                ps.WriteLine("End");
-
-                ps.Flush();
-            }
-
-            kernel.CurrentWorkingDirectory.Pop();
-        }
-
-        private static bool ContainsSqlFiles(string folder)
-        {
-            if(Directory.GetFiles(folder, "*.sql").Length > 0)
-                return true; // if the folder contains 1 .sql file, that's good enough
-
-            foreach (string child in Directory.GetDirectories(folder))
-            {
-                if (ContainsSqlFiles(child))
-                    return true; // if 1 child folder contains a .sql file, still good enough
-            }
-
-            return false;
-        }
-
-        private static void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder)
-        {
-            foreach (string child in Directory.GetDirectories(folder))
-            {
-                if (ContainsSqlFiles(child))
-                {
-                    writer.WriteLine("Begin Folder = \"{0}\"", Path.GetFileName(child));
-                    writer.Indent++;
-                    WriteDatabaseFoldersAndFiles(writer, child);
-                    writer.Indent--;
-                    writer.WriteLine("End");
-                }
-            }
-            foreach (string file in Directory.GetFiles(folder, "*.sql"))
-            {
-                writer.WriteLine("Script = \"{0}\"", Path.GetFileName(file));
-            }
-        }
-
-        private void CleanProject(ProjectNode project)
-        {
-            kernel.Log.Write("...Cleaning project: {0}", project.Name);
-
-            ToolInfo toolInfo = tools[project.Language];
-            string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
-            string userFile = projectFile + ".user";
-
-            Helper.DeleteIfExists(projectFile);
-            Helper.DeleteIfExists(userFile);
-        }
-
-        private void CleanSolution(SolutionNode solution)
-        {
-            kernel.Log.Write("Cleaning {0} solution and project files", VersionName, solution.Name);
-
-            string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
-            string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
-
-            Helper.DeleteIfExists(slnFile);
-            Helper.DeleteIfExists(suoFile);
-
-            foreach (ProjectNode project in solution.Projects)
-            {
-                CleanProject(project);
-            }
-
-            kernel.Log.Write("");
-        }
-
-        #endregion
-
-        #region ITarget Members
-
-        /// <summary>
-        /// Writes the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public virtual void Write(Kernel kern)
-        {
-            if (kern == null)
-            {
-                throw new ArgumentNullException("kern");
-            }
-            kernel = kern;
-            foreach (SolutionNode sol in kernel.Solutions)
-            {
-                WriteSolution(sol, true);
-            }
-            kernel = null;
-        }
-
-        /// <summary>
-        /// Cleans the specified kern.
-        /// </summary>
-        /// <param name="kern">The kern.</param>
-        public virtual void Clean(Kernel kern)
-        {
-            if (kern == null)
-            {
-                throw new ArgumentNullException("kern");
-            }
-            kernel = kern;
-            foreach (SolutionNode sol in kernel.Solutions)
-            {
-                CleanSolution(sol);
-            }
-            kernel = null;
-        }
-
-        #endregion
-    }
+				ps.WriteLine("	<Import Project=\"" + toolInfo.ImportProject + "\" />");
+				ps.WriteLine("	<PropertyGroup>");
+				ps.WriteLine("	  <PreBuildEvent>");
+				ps.WriteLine("	  </PreBuildEvent>");
+				ps.WriteLine("	  <PostBuildEvent>");
+				ps.WriteLine("	  </PostBuildEvent>");
+				ps.WriteLine("	</PropertyGroup>");
+				ps.WriteLine("</Project>");
+			}
+			#endregion
+
+			#region User File
+
+			ps = new StreamWriter(projectFile + ".user");
+			using (ps)
+			{
+				// Get the first configuration from the project.
+				ConfigurationNode firstConfiguration = null;
+
+				if (project.Configurations.Count > 0)
+				{
+					firstConfiguration = project.Configurations[0];
+				}
+
+				ps.WriteLine("<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
+				//ps.WriteLine( "<VisualStudioProject>" );
+				//ps.WriteLine("  <{0}>", toolInfo.XMLTag);
+				//ps.WriteLine("	<Build>");
+				ps.WriteLine("	<PropertyGroup>");
+				//ps.WriteLine("	  <Settings ReferencePath=\"{0}\">", MakeRefPath(project));
+
+				if (firstConfiguration != null)
+				{
+					ps.WriteLine("	  <Configuration Condition=\" '$(Configuration)' == '' \">{0}</Configuration>", firstConfiguration.Name);
+					ps.WriteLine("	  <Platform Condition=\" '$(Platform)' == '' \">{0}</Platform>", firstConfiguration.Platform);
+				}
+
+				ps.WriteLine("	  <ReferencePath>{0}</ReferencePath>", MakeRefPath(project));
+				ps.WriteLine("	  <LastOpenVersion>{0}</LastOpenVersion>", ProductVersion);
+				ps.WriteLine("	  <ProjectView>ProjectFiles</ProjectView>");
+				ps.WriteLine("	  <ProjectTrust>0</ProjectTrust>");
+				ps.WriteLine("	</PropertyGroup>");
+				foreach (ConfigurationNode conf in project.Configurations)
+				{
+					ps.Write("	<PropertyGroup");
+					ps.Write(" Condition = \" '$(Configuration)|$(Platform)' == '{0}|{1}' \"", conf.Name, conf.Platform);
+					ps.WriteLine(" />");
+				}
+				ps.WriteLine("</Project>");
+			}
+			#endregion
+
+			kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private void WriteSolution(SolutionNode solution, bool writeSolutionToDisk)
+		{
+			kernel.Log.Write("Creating {0} solution and project files", VersionName);
+
+			foreach (SolutionNode child in solution.Solutions)
+			{
+				kernel.Log.Write("...Creating folder: {0}", child.Name);
+				WriteSolution(child, false);
+			}
+
+			foreach (ProjectNode project in solution.Projects)
+			{
+				kernel.Log.Write("...Creating project: {0}", project.Name);
+				WriteProject(solution, project);
+			}
+
+			foreach (DatabaseProjectNode project in solution.DatabaseProjects)
+			{
+				kernel.Log.Write("...Creating database project: {0}", project.Name);
+				WriteDatabaseProject(solution, project);
+			}
+
+			if (writeSolutionToDisk) // only write main solution
+			{
+				kernel.Log.Write("");
+				string solutionFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
+				
+				using (StreamWriter ss = new StreamWriter(solutionFile))
+				{
+					kernel.CurrentWorkingDirectory.Push();
+					Helper.SetCurrentDir(Path.GetDirectoryName(solutionFile));
+
+					ss.WriteLine("Microsoft Visual Studio Solution File, Format Version {0}", SolutionVersion);
+					ss.WriteLine(SolutionTag);
+
+					WriteProjectDeclarations(ss, solution, solution);
+
+					ss.WriteLine("Global");
+
+					ss.WriteLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
+					foreach (ConfigurationNode conf in solution.Configurations)
+					{
+						ss.WriteLine("\t\t{0} = {0}", conf.NameAndPlatform);
+					}
+					ss.WriteLine("\tEndGlobalSection");
+
+					ss.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
+					WriteConfigurationLines(solution.Configurations, solution, ss);
+					ss.WriteLine("\tEndGlobalSection");
+
+					if (solution.Solutions.Count > 0)
+					{
+						ss.WriteLine("\tGlobalSection(NestedProjects) = preSolution");
+						foreach (SolutionNode embeddedSolution in solution.Solutions)
+						{
+							WriteNestedProjectMap(ss, embeddedSolution);
+						}
+						ss.WriteLine("\tEndGlobalSection");
+					}
+
+					ss.WriteLine("EndGlobal");
+				}
+
+				kernel.CurrentWorkingDirectory.Pop();
+			}
+		}
+
+		private void WriteProjectDeclarations(TextWriter writer, SolutionNode actualSolution, SolutionNode embeddedSolution)
+		{
+			foreach (SolutionNode childSolution in embeddedSolution.Solutions)
+			{
+				WriteEmbeddedSolution(writer, childSolution);
+				WriteProjectDeclarations(writer, actualSolution, childSolution);
+			}
+
+			foreach (ProjectNode project in embeddedSolution.Projects)
+			{
+				WriteProject(actualSolution, writer, project);
+			}
+
+			foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
+			{
+				WriteProject(actualSolution, writer, dbProject);
+			}
+
+			if (actualSolution.Guid == embeddedSolution.Guid)
+			{
+				WriteSolutionFiles(actualSolution, writer);
+			}
+		}
+
+		private static void WriteNestedProjectMap(TextWriter writer, SolutionNode embeddedSolution)
+		{
+			foreach (ProjectNode project in embeddedSolution.Projects)
+			{
+				WriteNestedProject(writer, embeddedSolution, project.Guid);
+			}
+
+			foreach (DatabaseProjectNode dbProject in embeddedSolution.DatabaseProjects)
+			{
+				WriteNestedProject(writer, embeddedSolution, dbProject.Guid);
+			}
+
+			foreach (SolutionNode child in embeddedSolution.Solutions)
+			{
+				WriteNestedProject(writer, embeddedSolution, child.Guid);
+				WriteNestedProjectMap(writer, child);
+			}
+		}
+
+		private static void WriteNestedProject(TextWriter writer, SolutionNode solution, Guid projectGuid)
+		{
+			WriteNestedFolder(writer, solution.Guid, projectGuid);
+		}
+
+		private static void WriteNestedFolder(TextWriter writer, Guid parentGuid, Guid childGuid)
+		{
+			writer.WriteLine("\t\t{0} = {1}",
+			                 childGuid.ToString("B").ToUpper(),
+			                 parentGuid.ToString("B").ToUpper());
+		}
+
+		private static void WriteConfigurationLines(IEnumerable<ConfigurationNode> configurations, SolutionNode solution, TextWriter ss)
+		{
+			foreach (ProjectNode project in solution.Projects)
+			{
+				foreach (ConfigurationNode conf in configurations)
+				{
+					ss.WriteLine("\t\t{0}.{1}.ActiveCfg = {1}",
+					             project.Guid.ToString("B").ToUpper(),
+					             conf.NameAndPlatform);
+
+					ss.WriteLine("\t\t{0}.{1}.Build.0 = {1}",
+					             project.Guid.ToString("B").ToUpper(),
+					             conf.NameAndPlatform);
+				}
+			}
+
+			foreach (SolutionNode child in solution.Solutions)
+			{
+				WriteConfigurationLines(configurations, child, ss);
+			}
+		}
+
+		private void WriteSolutionFiles(SolutionNode solution, TextWriter ss)
+		{
+			if(solution.Files != null && solution.Files.Count > 0)
+				WriteProject(ss, "Folder", solution.Guid, "Solution Files", "Solution Files", solution.Files);
+		}
+
+		private void WriteEmbeddedSolution(TextWriter writer, SolutionNode embeddedSolution)
+		{
+			WriteProject(writer, "Folder", embeddedSolution.Guid, embeddedSolution.Name, embeddedSolution.Name, embeddedSolution.Files);
+		}
+
+		private void WriteProject(SolutionNode solution, TextWriter ss, ProjectNode project)
+		{
+			WriteProject(ss, solution, project.Language, project.Guid, project.Name, project.FullPath);
+		}
+
+		private void WriteProject(SolutionNode solution, TextWriter ss, DatabaseProjectNode dbProject)
+		{
+			if (solution.Files != null && solution.Files.Count > 0)
+				WriteProject(ss, solution, "Database", dbProject.Guid, dbProject.Name, dbProject.FullPath);
+		}
+
+		const string ProjectDeclarationBeginFormat = "Project(\"{0}\") = \"{1}\", \"{2}\", \"{3}\"";
+		const string ProjectDeclarationEndFormat = "EndProject";
+
+		private void WriteProject(TextWriter ss, SolutionNode solution, string language, Guid guid, string name, string projectFullPath)
+		{
+			if (!tools.ContainsKey(language))
+				throw new UnknownLanguageException("Unknown .NET language: " + language);
+
+			ToolInfo toolInfo = tools[language];
+
+			string path = Helper.MakePathRelativeTo(solution.FullPath, projectFullPath);
+
+			path = Helper.MakeFilePath(path, name, toolInfo.FileExtension);
+
+			WriteProject(ss, language, guid, name, path);
+		}
+
+		private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location)
+		{
+			WriteProject(writer, language, projectGuid, name, location, null);
+		}
+
+		private void WriteProject(TextWriter writer, string language, Guid projectGuid, string name, string location, FilesNode files)
+		{
+			if (!tools.ContainsKey(language))
+				throw new UnknownLanguageException("Unknown .NET language: " + language);
+
+			ToolInfo toolInfo = tools[language];
+
+			writer.WriteLine(ProjectDeclarationBeginFormat,
+			                 toolInfo.Guid,
+			                 name,
+			                 location,
+			                 projectGuid.ToString("B").ToUpper());
+
+			if (files != null)
+			{
+				writer.WriteLine("\tProjectSection(SolutionItems) = preProject");
+
+				foreach (string file in files)
+					writer.WriteLine("\t\t{0} = {0}", file);
+
+				writer.WriteLine("\tEndProjectSection");
+			}
+
+			writer.WriteLine(ProjectDeclarationEndFormat);
+		}
+
+		private void WriteDatabaseProject(SolutionNode solution, DatabaseProjectNode project)
+		{
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, "dbp");
+			IndentedTextWriter ps = new IndentedTextWriter(new StreamWriter(projectFile), "	  ");
+
+			kernel.CurrentWorkingDirectory.Push();
+
+			Helper.SetCurrentDir(Path.GetDirectoryName(projectFile));
+
+			using (ps)
+			{
+				ps.WriteLine("# Microsoft Developer Studio Project File - Database Project");
+				ps.WriteLine("Begin DataProject = \"{0}\"", project.Name);
+				ps.Indent++;
+				ps.WriteLine("MSDTVersion = \"80\"");
+				// TODO: Use the project.Files property
+				if (ContainsSqlFiles(Path.GetDirectoryName(projectFile)))
+					WriteDatabaseFoldersAndFiles(ps, Path.GetDirectoryName(projectFile));
+
+				ps.WriteLine("Begin DBRefFolder = \"Database References\"");
+				ps.Indent++;
+				foreach (DatabaseReferenceNode reference in project.References)
+				{
+					ps.WriteLine("Begin DBRefNode = \"{0}\"", reference.Name);
+					ps.Indent++;
+					ps.WriteLine("ConnectStr = \"{0}\"", reference.ConnectionString);
+					ps.WriteLine("Provider = \"{0}\"", reference.ProviderId.ToString("B").ToUpper());
+					//ps.WriteLine("Colorizer = 5");
+					ps.Indent--;
+					ps.WriteLine("End");
+				}
+				ps.Indent--;
+				ps.WriteLine("End");
+				ps.Indent--;
+				ps.WriteLine("End");
+
+				ps.Flush();
+			}
+
+			kernel.CurrentWorkingDirectory.Pop();
+		}
+
+		private static bool ContainsSqlFiles(string folder)
+		{
+			if(Directory.GetFiles(folder, "*.sql").Length > 0)
+				return true; // if the folder contains 1 .sql file, that's good enough
+
+			foreach (string child in Directory.GetDirectories(folder))
+			{
+				if (ContainsSqlFiles(child))
+					return true; // if 1 child folder contains a .sql file, still good enough
+			}
+
+			return false;
+		}
+
+		private static void WriteDatabaseFoldersAndFiles(IndentedTextWriter writer, string folder)
+		{
+			foreach (string child in Directory.GetDirectories(folder))
+			{
+				if (ContainsSqlFiles(child))
+				{
+					writer.WriteLine("Begin Folder = \"{0}\"", Path.GetFileName(child));
+					writer.Indent++;
+					WriteDatabaseFoldersAndFiles(writer, child);
+					writer.Indent--;
+					writer.WriteLine("End");
+				}
+			}
+			foreach (string file in Directory.GetFiles(folder, "*.sql"))
+			{
+				writer.WriteLine("Script = \"{0}\"", Path.GetFileName(file));
+			}
+		}
+
+		private void CleanProject(ProjectNode project)
+		{
+			kernel.Log.Write("...Cleaning project: {0}", project.Name);
+
+			ToolInfo toolInfo = tools[project.Language];
+			string projectFile = Helper.MakeFilePath(project.FullPath, project.Name, toolInfo.FileExtension);
+			string userFile = projectFile + ".user";
+
+			Helper.DeleteIfExists(projectFile);
+			Helper.DeleteIfExists(userFile);
+		}
+
+		private void CleanSolution(SolutionNode solution)
+		{
+			kernel.Log.Write("Cleaning {0} solution and project files", VersionName, solution.Name);
+
+			string slnFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "sln");
+			string suoFile = Helper.MakeFilePath(solution.FullPath, solution.Name, "suo");
+
+			Helper.DeleteIfExists(slnFile);
+			Helper.DeleteIfExists(suoFile);
+
+			foreach (ProjectNode project in solution.Projects)
+			{
+				CleanProject(project);
+			}
+
+			kernel.Log.Write("");
+		}
+
+		#endregion
+
+		#region ITarget Members
+
+		/// <summary>
+		/// Writes the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public virtual void Write(Kernel kern)
+		{
+			if (kern == null)
+			{
+				throw new ArgumentNullException("kern");
+			}
+			kernel = kern;
+			foreach (SolutionNode sol in kernel.Solutions)
+			{
+				WriteSolution(sol, true);
+			}
+			kernel = null;
+		}
+
+		/// <summary>
+		/// Cleans the specified kern.
+		/// </summary>
+		/// <param name="kern">The kern.</param>
+		public virtual void Clean(Kernel kern)
+		{
+			if (kern == null)
+			{
+				throw new ArgumentNullException("kern");
+			}
+			kernel = kern;
+			foreach (SolutionNode sol in kernel.Solutions)
+			{
+				CleanSolution(sol);
+			}
+			kernel = null;
+		}
+
+		#endregion
+	}
 }

+ 46 - 33
Prebuild/src/Core/Targets/VSVersion.cs

@@ -5,16 +5,16 @@ Copyright (c) 2008-2009 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -25,30 +25,43 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY O
 
 namespace Prebuild.Core.Targets
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public enum VSVersion
-    {
+	/// <summary>
+	/// 
+	/// </summary>
+	public enum VSVersion
+	{
+		/// <summary>
+		/// Visual Studio 2002 
+		/// </summary>
+		VS70,
+		/// <summary>
+		/// Visual Studio 2003 
+		/// </summary>
+		VS71,
+		/// <summary>
+		/// Visual Studio 2005 
+		/// </summary>
+		VS80,
+		/// <summary>
+		/// Visual Studio 2008 
+		/// </summary>
+		VS90,
+		/// <summary>
+		/// Visual Studio 2010 
+		/// </summary>
+		VS10,
+		/// <summary>
+		/// Visual Studio 2012 
+		/// </summary>
+		VS11,
+		/// <summary>
+		/// Visual Studio 2013 
+		/// </summary>
+		VS12,
         /// <summary>
-        /// Visual Studio 2002
+        /// Visual Studio 2015 
         /// </summary>
-        VS70,
-        /// <summary>
-        /// Visual Studio 2003
-        /// </summary>
-        VS71,
-        /// <summary>
-        /// Visual Studio 2005
-        /// </summary>
-        VS80,
-        /// <summary>
-        /// Visual Studio 2008
-        /// </summary>
-        VS90,
-        /// <summary>
-        /// Visual Studio 2010
-        /// </summary>
-        VS10
-    }
+        VS15
+
+	}
 }

+ 12 - 12
Prebuild/src/Core/Targets/XcodeTarget.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004 Matthew Holmes ([email protected]), Dan Moorehead (da
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -36,7 +36,7 @@ using Prebuild.Core.Utilities;
 namespace Prebuild.Core.Targets
 {
     /// <summary>
-    ///
+    /// 
     /// </summary>
     [Target("xcode")]
     public class XcodeTarget : ITarget
@@ -282,7 +282,7 @@ namespace Prebuild.Core.Targets
                 }
                 //if (project.Files.GetSubType(file).ToString() != "Code")
                 //{
-                //	ps.WriteLine("    <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");
+                //	ps.WriteLine("    <EmbeddedResource Include=\"{0}\">", file.Substring(0, file.LastIndexOf('.')) + ".resx");                 
 
                 ss.WriteLine("            </resources>");
                 ss.WriteLine("            <sources failonempty=\"true\">");

+ 38 - 38
Prebuild/src/Core/UnknownLanguageException.cs

@@ -6,12 +6,12 @@
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
- *
+ * 
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- *
+ * 
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
@@ -20,44 +20,44 @@
 using System;
 using System.Runtime.Serialization;
 
-namespace Prebuild.Core
+namespace Prebuild.Core 
 {
-    /// <summary>
-    /// </summary>
-    [Serializable()]
-    public class UnknownLanguageException : Exception
-    {
-        /// <summary>
-        /// Basic exception.
-        /// </summary>
-        public UnknownLanguageException()
-        {
-        }
+	/// <summary>
+	/// </summary>
+	[Serializable()]
+	public class UnknownLanguageException : Exception 
+	{
+		/// <summary>
+		/// Basic exception.
+		/// </summary>
+		public UnknownLanguageException() 
+		{
+		}
 
-        /// <summary>
-        /// Exception with specified string
-        /// </summary>
-        /// <param name="message">Exception message</param>
-        public UnknownLanguageException(string message): base(message)
-        {
-        }
+		/// <summary>
+		/// Exception with specified string
+		/// </summary>
+		/// <param name="message">Exception message</param>
+		public UnknownLanguageException(string message): base(message)
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="exception"></param>
-        public UnknownLanguageException(string message, Exception exception) : base(message, exception)
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="message"></param>
+		/// <param name="exception"></param>
+		public UnknownLanguageException(string message, Exception exception) : base(message, exception)
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="context"></param>
-        protected UnknownLanguageException(SerializationInfo info, StreamingContext context) : base( info, context )
-        {
-        }
-    }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="info"></param>
+		/// <param name="context"></param>
+		protected UnknownLanguageException(SerializationInfo info, StreamingContext context) : base( info, context )
+		{
+		}
+	}
 }

+ 127 - 127
Prebuild/src/Core/Utilities/CommandLineCollection.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -27,126 +27,126 @@ using System.Collections;
 using System.Collections.Generic;
 
 namespace Prebuild.Core.Utilities
-{
-    /// <summary>
-    /// The CommandLine class parses and interprets the command-line arguments passed to
-    /// prebuild.
-    /// </summary>
-    public class CommandLineCollection : IEnumerable<KeyValuePair<string, string>>
-    {
-        #region Fields
-
-        // The raw OS arguments
-        private readonly string[] m_RawArgs;
-
-        // Command-line argument storage
-        private readonly Dictionary<string, string> m_Arguments = new Dictionary<string, string>();
-
-        #endregion
-
-        #region Constructors
-
-        /// <summary>
-        /// Create a new CommandLine instance and set some internal variables.
-        /// </summary>
-        public CommandLineCollection(string[] args)
-        {
-            m_RawArgs = args;
-
-            Parse();
-        }
-
-        #endregion
-
-        #region Private Methods
-
-        private void Parse()
-        {
-            if(m_RawArgs.Length < 1)
-                return;
-
-            int idx = 0;
+{    
+	/// <summary>
+	/// The CommandLine class parses and interprets the command-line arguments passed to
+	/// prebuild.
+	/// </summary>
+	public class CommandLineCollection : IEnumerable<KeyValuePair<string, string>>
+	{
+		#region Fields
+
+		// The raw OS arguments
+		private readonly string[] m_RawArgs;
+
+		// Command-line argument storage
+		private readonly Dictionary<string, string> m_Arguments = new Dictionary<string, string>();
+        
+		#endregion
+        
+		#region Constructors
+        
+		/// <summary>
+		/// Create a new CommandLine instance and set some internal variables.
+		/// </summary>
+		public CommandLineCollection(string[] args) 
+		{
+			m_RawArgs = args;
+			
+			Parse();
+		}
+
+		#endregion
+
+		#region Private Methods
+
+		private void Parse() 
+		{
+			if(m_RawArgs.Length < 1)
+				return;
+
+			int idx = 0;
             string lastArg = null;
 
-            while(idx <m_RawArgs.Length)
-            {
-                string arg = m_RawArgs[idx];
-
-                if(arg.Length > 2 && arg[0] == '/')
-                {
-                    arg = arg.Substring(1);
-                    lastArg = arg;
-                    m_Arguments[arg] = "";
-                }
-                else
-                {
-                    if(lastArg != null)
-                    {
-                        m_Arguments[lastArg] = arg;
-                        lastArg = null;
-                    }
-                }
-
-                idx++;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        /// <summary>
-        /// Wases the passed.
-        /// </summary>
-        /// <param name="arg">The arg.</param>
-        /// <returns></returns>
-        public bool WasPassed(string arg)
-        {
-            return (m_Arguments.ContainsKey(arg));
-        }
-
-        #endregion
-
-        #region Properties
-
-        /// <summary>
-        /// Gets the parameter associated with the command line option
-        /// </summary>
-        /// <remarks>Returns null if option was not specified,
-        /// null string if no parameter was specified, and the value if a parameter was specified</remarks>
-        public string this[string index]
-        {
-            get
-            {
-                if(m_Arguments.ContainsKey(index))
-                {
-                    return (m_Arguments[index]);
-                }
-                return null;
-            }
-        }
-
-        #endregion
-
-        #region IEnumerable Members
-
-        /// <summary>
-        /// Returns an enumerator that can iterate through a collection.
-        /// </summary>
-        /// <returns>
-        /// An <see cref="T:System.Collections.IDictionaryEnumerator"/>
-        /// that can be used to iterate through the collection.
-        /// </returns>
+			while(idx <m_RawArgs.Length) 
+			{
+			    string arg = m_RawArgs[idx];
+
+				if(arg.Length > 2 && arg[0] == '/') 
+				{
+					arg = arg.Substring(1);
+					lastArg = arg;
+					m_Arguments[arg] = "";
+				} 
+				else 
+				{
+					if(lastArg != null)
+					{
+						m_Arguments[lastArg] = arg;
+						lastArg = null;
+					}
+				}
+
+				idx++;
+			}
+		}
+
+		#endregion
+
+		#region Public Methods
+
+		/// <summary>
+		/// Wases the passed.
+		/// </summary>
+		/// <param name="arg">The arg.</param>
+		/// <returns></returns>
+		public bool WasPassed(string arg)
+		{
+			return (m_Arguments.ContainsKey(arg));
+		}
+
+		#endregion
+
+		#region Properties
+
+		/// <summary>
+		/// Gets the parameter associated with the command line option
+		/// </summary>
+		/// <remarks>Returns null if option was not specified,
+		/// null string if no parameter was specified, and the value if a parameter was specified</remarks>
+		public string this[string index] 
+		{
+			get
+			{
+			    if(m_Arguments.ContainsKey(index))
+				{
+					return (m_Arguments[index]);
+				}
+			    return null;
+			}
+		}
+
+		#endregion
+
+		#region IEnumerable Members
+
+		/// <summary>
+		/// Returns an enumerator that can iterate through a collection.
+		/// </summary>
+		/// <returns>
+		/// An <see cref="T:System.Collections.IDictionaryEnumerator"/>
+		/// that can be used to iterate through the collection.
+		/// </returns>
         public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
-        {
-            return m_Arguments.GetEnumerator();
-        }
+		{
+		    return m_Arguments.GetEnumerator();
+		}
 
-        IEnumerator IEnumerable.GetEnumerator()
-        {
-            return GetEnumerator();
-        }
+	    IEnumerator IEnumerable.GetEnumerator()
+	    {
+	        return GetEnumerator();
+	    }
 
-        #endregion
-    }
+	    #endregion
+	}
 }

+ 40 - 40
Prebuild/src/Core/Utilities/CurrentDirectory.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -28,41 +28,41 @@ using System.Collections.Generic;
 
 namespace Prebuild.Core.Utilities
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public class CurrentDirectory
-    {
-        #region Fields
+	/// <summary>
+	/// 
+	/// </summary>
+	public class CurrentDirectory
+	{
+		#region Fields
 
-        private readonly Stack<string> m_Stack = new Stack<string>();
+		private readonly Stack<string> m_Stack = new Stack<string>();
 
-        #endregion
+		#endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        /// Pushes this instance.
-        /// </summary>
-        public void Push()
-        {
-            m_Stack.Push(Environment.CurrentDirectory);
-        }
+		/// <summary>
+		/// Pushes this instance.
+		/// </summary>
+		public void Push()
+		{
+			m_Stack.Push(Environment.CurrentDirectory);
+		}
 
-        /// <summary>
-        /// Pops this instance.
-        /// </summary>
-        public void Pop()
-        {
-            if(m_Stack.Count < 1)
-            {
-                return;
-            }
+		/// <summary>
+		/// Pops this instance.
+		/// </summary>
+		public void Pop()
+		{
+			if(m_Stack.Count < 1)
+			{
+				return;
+			}
+            
+			string cwd = m_Stack.Pop();
+			Helper.SetCurrentDir(cwd);
+		}
 
-            string cwd = m_Stack.Pop();
-            Helper.SetCurrentDir(cwd);
-        }
-
-        #endregion
-    }
+		#endregion
+	}
 }

+ 518 - 518
Prebuild/src/Core/Utilities/Helper.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -35,541 +35,541 @@ using Prebuild.Core.Nodes;
 
 namespace Prebuild.Core.Utilities
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public class Helper
-    {
-        #region Fields
-
-        static bool checkForOSVariables;
-
-        /// <summary>
-        ///
-        /// </summary>
-        public static bool CheckForOSVariables
-        {
-            get
-            {
-                return checkForOSVariables;
-            }
-            set
-            {
-                checkForOSVariables = value;
-            }
-        }
-
-        #endregion
-
-        #region Public Methods
-
-        #region String Parsing
-
-        public delegate string StringLookup(string key);
-
-        /// <summary>
-        /// Gets a collection of StringLocationPair objects that represent the matches
-        /// </summary>
-        /// <param name="target">The target.</param>
-        /// <param name="beforeGroup">The before group.</param>
-        /// <param name="afterGroup">The after group.</param>
-        /// <param name="includeDelimitersInSubstrings">if set to <c>true</c> [include delimiters in substrings].</param>
-        /// <returns></returns>
-        public static StringCollection FindGroups(string target, string beforeGroup, string afterGroup, bool includeDelimitersInSubstrings)
-        {
-            if( beforeGroup == null )
-            {
-                throw new ArgumentNullException("beforeGroup");
-            }
-            if( afterGroup == null )
-            {
-                throw new ArgumentNullException("afterGroup");
-            }
-            StringCollection results = new StringCollection();
-            if(target == null || target.Length == 0)
-            {
-                return results;
-            }
-
-            int beforeMod = 0;
-            int afterMod = 0;
-            if(includeDelimitersInSubstrings)
-            {
-                //be sure to not exlude the delims
-                beforeMod = beforeGroup.Length;
-                afterMod = afterGroup.Length;
-            }
-            int startIndex = 0;
-            while((startIndex = target.IndexOf(beforeGroup,startIndex)) != -1) {
-                int endIndex = target.IndexOf(afterGroup,startIndex);//the index of the char after it
-                if(endIndex == -1)
-                {
-                    break;
-                }
-                int length = endIndex - startIndex - beforeGroup.Length;//move to the first char in the string
-                string substring = substring = target.Substring(startIndex + beforeGroup.Length - beforeMod,
-                    length - afterMod);
-
-                results.Add(substring);
-                //results.Add(new StringLocationPair(substring,startIndex));
-                startIndex = endIndex + 1;
-                //the Interpolate*() methods will not work if expressions are expandded inside expression due to an optimization
-                //so start after endIndex
-
-            }
-            return results;
-        }
-
-        /// <summary>
-        /// Replaces the groups.
-        /// </summary>
-        /// <param name="target">The target.</param>
-        /// <param name="beforeGroup">The before group.</param>
-        /// <param name="afterGroup">The after group.</param>
-        /// <param name="lookup">The lookup.</param>
-        /// <returns></returns>
-        public static string ReplaceGroups(string target, string beforeGroup, string afterGroup, StringLookup lookup) {
-            if( target == null )
-            {
-                throw new ArgumentNullException("target");
-            }
-            //int targetLength = target.Length;
-            StringCollection strings = FindGroups(target,beforeGroup,afterGroup,false);
-            if( lookup == null )
-            {
-                throw new ArgumentNullException("lookup");
-            }
-            foreach(string substring in strings)
-            {
-                target = target.Replace(beforeGroup + substring + afterGroup, lookup(substring) );
-            }
-            return target;
-        }
-
-        /// <summary>
-        /// Replaces ${var} statements in a string with the corresonding values as detirmined by the lookup delegate
-        /// </summary>
-        /// <param name="target">The target.</param>
-        /// <param name="lookup">The lookup.</param>
-        /// <returns></returns>
-        public static string InterpolateForVariables(string target, StringLookup lookup)
-        {
-            return ReplaceGroups(target, "${" , "}" , lookup);
-        }
-
-        /// <summary>
-        /// Replaces ${var} statements in a string with the corresonding environment variable with name var
-        /// </summary>
-        /// <param name="target"></param>
-        /// <returns></returns>
-        public static string InterpolateForEnvironmentVariables(string target)
-        {
-            return InterpolateForVariables(target, new StringLookup(Environment.GetEnvironmentVariable));
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Translates the value.
-        /// </summary>
-        /// <param name="translateType">Type of the translate.</param>
-        /// <param name="translationItem">The translation item.</param>
-        /// <returns></returns>
-        public static object TranslateValue(Type translateType, string translationItem)
-        {
-            if(translationItem == null)
-            {
-                return null;
-            }
-
-            try
-            {
-                string lowerVal = translationItem.ToLower();
-                if(translateType == typeof(bool))
-                {
-                    return (lowerVal == "true" || lowerVal == "1" || lowerVal == "y" || lowerVal == "yes" || lowerVal == "on");
-                }
-                else if(translateType == typeof(int))
-                {
-                    return (Int32.Parse(translationItem));
-                }
-                else
-                {
-                    return translationItem;
-                }
-            }
-            catch(FormatException)
-            {
-                return null;
-            }
-        }
-
-        /// <summary>
-        /// Deletes if exists.
-        /// </summary>
-        /// <param name="file">The file.</param>
-        /// <returns></returns>
-        public static bool DeleteIfExists(string file)
-        {
-            string resFile = null;
-            try
-            {
-                resFile = ResolvePath(file);
-            }
-            catch(ArgumentException)
-            {
-                return false;
-            }
-
-            if(!File.Exists(resFile))
-            {
-                return false;
-            }
-
-            File.Delete(resFile);
-            return true;
-        }
+	/// <summary>
+	/// 
+	/// </summary>
+	public class Helper
+	{
+		#region Fields
+
+		static bool checkForOSVariables;
+
+		/// <summary>
+		/// 
+		/// </summary>
+		public static bool CheckForOSVariables
+		{
+			get
+			{
+				return checkForOSVariables;
+			}
+			set
+			{
+				checkForOSVariables = value;
+			}
+		}
+
+		#endregion
+        
+		#region Public Methods
+
+		#region String Parsing
+
+		public delegate string StringLookup(string key);
+
+		/// <summary>
+		/// Gets a collection of StringLocationPair objects that represent the matches
+		/// </summary>
+		/// <param name="target">The target.</param>
+		/// <param name="beforeGroup">The before group.</param>
+		/// <param name="afterGroup">The after group.</param>
+		/// <param name="includeDelimitersInSubstrings">if set to <c>true</c> [include delimiters in substrings].</param>
+		/// <returns></returns>
+		public static StringCollection FindGroups(string target, string beforeGroup, string afterGroup, bool includeDelimitersInSubstrings) 
+		{
+			if( beforeGroup == null )
+			{
+				throw new ArgumentNullException("beforeGroup");
+			}
+			if( afterGroup == null )
+			{
+				throw new ArgumentNullException("afterGroup");
+			}
+			StringCollection results = new StringCollection();
+			if(target == null || target.Length == 0)
+			{
+				return results;
+			}
+
+			int beforeMod = 0;
+			int afterMod = 0;
+			if(includeDelimitersInSubstrings) 
+			{
+				//be sure to not exlude the delims
+				beforeMod = beforeGroup.Length;
+				afterMod = afterGroup.Length;
+			}
+			int startIndex = 0;
+			while((startIndex = target.IndexOf(beforeGroup,startIndex)) != -1) {
+				int endIndex = target.IndexOf(afterGroup,startIndex);//the index of the char after it
+				if(endIndex == -1)
+				{
+					break;
+				}
+				int length = endIndex - startIndex - beforeGroup.Length;//move to the first char in the string
+				string substring = target.Substring(startIndex + beforeGroup.Length - beforeMod,
+					length - afterMod);
+
+				results.Add(substring);
+				//results.Add(new StringLocationPair(substring,startIndex));
+				startIndex = endIndex + 1;
+				//the Interpolate*() methods will not work if expressions are expandded inside expression due to an optimization
+				//so start after endIndex
+				
+			}
+			return results;
+		}
+
+		/// <summary>
+		/// Replaces the groups.
+		/// </summary>
+		/// <param name="target">The target.</param>
+		/// <param name="beforeGroup">The before group.</param>
+		/// <param name="afterGroup">The after group.</param>
+		/// <param name="lookup">The lookup.</param>
+		/// <returns></returns>
+		public static string ReplaceGroups(string target, string beforeGroup, string afterGroup, StringLookup lookup) {
+			if( target == null )
+			{
+				throw new ArgumentNullException("target");
+			}
+			//int targetLength = target.Length;
+			StringCollection strings = FindGroups(target,beforeGroup,afterGroup,false);
+			if( lookup == null )
+			{
+				throw new ArgumentNullException("lookup");
+			}
+			foreach(string substring in strings) 
+			{
+				target = target.Replace(beforeGroup + substring + afterGroup, lookup(substring) );
+			}
+			return target;
+		}
+
+		/// <summary>
+		/// Replaces ${var} statements in a string with the corresonding values as detirmined by the lookup delegate
+		/// </summary>
+		/// <param name="target">The target.</param>
+		/// <param name="lookup">The lookup.</param>
+		/// <returns></returns>
+		public static string InterpolateForVariables(string target, StringLookup lookup) 
+		{
+			return ReplaceGroups(target, "${" , "}" , lookup);
+		}
+
+		/// <summary>
+		/// Replaces ${var} statements in a string with the corresonding environment variable with name var
+		/// </summary>
+		/// <param name="target"></param>
+		/// <returns></returns>
+		public static string InterpolateForEnvironmentVariables(string target) 
+		{
+			return InterpolateForVariables(target, new StringLookup(Environment.GetEnvironmentVariable));
+		}
+
+		#endregion
+
+		/// <summary>
+		/// Translates the value.
+		/// </summary>
+		/// <param name="translateType">Type of the translate.</param>
+		/// <param name="translationItem">The translation item.</param>
+		/// <returns></returns>
+		public static object TranslateValue(Type translateType, string translationItem)
+		{
+			if(translationItem == null)
+			{
+				return null;
+			}
+
+			try
+			{
+				string lowerVal = translationItem.ToLower();
+				if(translateType == typeof(bool))
+				{
+					return (lowerVal == "true" || lowerVal == "1" || lowerVal == "y" || lowerVal == "yes" || lowerVal == "on");
+				}
+				else if(translateType == typeof(int))
+				{
+					return (Int32.Parse(translationItem));
+				}
+				else
+				{
+					return translationItem;
+				}
+			}
+			catch(FormatException)
+			{
+				return null;
+			}
+		}
+
+		/// <summary>
+		/// Deletes if exists.
+		/// </summary>
+		/// <param name="file">The file.</param>
+		/// <returns></returns>
+		public static bool DeleteIfExists(string file)
+		{
+			string resFile = null;
+			try
+			{
+				resFile = ResolvePath(file);
+			}
+			catch(ArgumentException)
+			{
+				return false;
+			}
+
+			if(!File.Exists(resFile))
+			{
+				return false;
+			}
+
+			File.Delete(resFile);
+			return true;
+		}
 
         static readonly char seperator = Path.DirectorySeparatorChar;
 
-        // This little gem was taken from the NeL source, thanks guys!
-        /// <summary>
-        /// Makes a relative path
-        /// </summary>
-        /// <param name="startPath">Path to start from</param>
-        /// <param name="endPath">Path to end at</param>
-        /// <returns>Path that will get from startPath to endPath</returns>
-        public static string MakePathRelativeTo(string startPath, string endPath)
-        {
-            string tmp = NormalizePath(startPath, seperator);
-            string src = NormalizePath(endPath, seperator);
-            string prefix = "";
-
-            while(true)
-            {
-                if((String.Compare(tmp, 0, src, 0, tmp.Length) == 0))
-                {
-                    string ret;
-                    int size = tmp.Length;
-                    if(size == src.Length)
-                    {
-                        return "./";
-                    }
+		// This little gem was taken from the NeL source, thanks guys!
+		/// <summary>
+		/// Makes a relative path
+		/// </summary>
+		/// <param name="startPath">Path to start from</param>
+		/// <param name="endPath">Path to end at</param>
+		/// <returns>Path that will get from startPath to endPath</returns>
+		public static string MakePathRelativeTo(string startPath, string endPath)
+		{
+			string tmp = NormalizePath(startPath, seperator);
+			string src = NormalizePath(endPath, seperator);
+			string prefix = "";
+
+			while(true)
+			{
+				if((String.Compare(tmp, 0, src, 0, tmp.Length) == 0))
+				{
+					string ret;
+					int size = tmp.Length;
+					if(size == src.Length)
+					{
+						return "./";
+					}
                     if((src.Length > tmp.Length) && src[tmp.Length - 1] != seperator)
-                    {
-                    }
-                    else
-                    {
-                        ret = prefix + endPath.Substring(size, endPath.Length - size);
-                        ret = ret.Trim();
+					{
+					}
+					else
+					{
+						ret = prefix + endPath.Substring(size, endPath.Length - size);
+						ret = ret.Trim();
                         if(ret[0] == seperator)
-                        {
-                            ret = "." + ret;
-                        }
+						{
+							ret = "." + ret;
+						}
 
-                        return NormalizePath(ret);
-                    }
+						return NormalizePath(ret);
+					}
+					
+				}
 
-                }
-
-                if(tmp.Length < 2)
-                {
-                    break;
-                }
+				if(tmp.Length < 2)
+				{
+					break;
+				}
 
                 int lastPos = tmp.LastIndexOf(seperator, tmp.Length - 2);
                 int prevPos = tmp.IndexOf(seperator);
 
-                if((lastPos == prevPos) || (lastPos == -1))
-                {
-                    break;
-                }
-
-                tmp = tmp.Substring(0, lastPos + 1);
-                prefix += ".." + seperator.ToString();
-            }
-
-            return endPath;
-        }
-
-        /// <summary>
-        /// Resolves the path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <returns></returns>
-        public static string ResolvePath(string path)
-        {
-            string tmpPath = NormalizePath(path);
-            if(tmpPath.Length < 1)
-            {
-                tmpPath = ".";
-            }
-
-            tmpPath = Path.GetFullPath(tmpPath);
-            if(!File.Exists(tmpPath) && !Directory.Exists(tmpPath))
-            {
-                throw new ArgumentException("Path could not be resolved: " + tmpPath);
-            }
-
-            return tmpPath;
-        }
-
-        /// <summary>
-        /// Normalizes the path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="separatorCharacter">The separator character.</param>
-        /// <returns></returns>
-        public static string NormalizePath(string path, char separatorCharacter)
-        {
-            if(path == null || path == "" || path.Length < 1)
-            {
-                return "";
-            }
-
-            string tmpPath = path.Replace('\\', '/');
-            tmpPath = tmpPath.Replace('/', separatorCharacter);
-            return tmpPath;
-        }
-
-        /// <summary>
-        /// Normalizes the path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <returns></returns>
-        public static string NormalizePath(string path)
-        {
-            return NormalizePath(path, Path.DirectorySeparatorChar);
-        }
-
-        /// <summary>
-        /// Ends the path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="separatorCharacter">The separator character.</param>
-        /// <returns></returns>
-        public static string EndPath(string path, char separatorCharacter)
-        {
-            if(path == null || path == "" || path.Length < 1)
-            {
-                return "";
-            }
-
-            if(!path.EndsWith(separatorCharacter.ToString()))
-            {
-                return (path + separatorCharacter);
-            }
-
-            return path;
-        }
-
-        /// <summary>
-        /// Ends the path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <returns></returns>
-        public static string EndPath(string path)
-        {
-            return EndPath(path, Path.DirectorySeparatorChar);
-        }
-
-        /// <summary>
-        /// Makes the file path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="name">The name.</param>
-        /// <param name="ext">The ext.</param>
-        /// <returns></returns>
-        public static string MakeFilePath(string path, string name, string ext)
-        {
-            string ret = EndPath(NormalizePath(path));
-
-            if( name == null )
-            {
-                throw new ArgumentNullException("name");
-            }
-
-            ret += name;
-            if(!name.EndsWith("." + ext))
-            {
-                ret += "." + ext;
-            }
-
+				if((lastPos == prevPos) || (lastPos == -1))
+				{
+					break;
+				}
+
+				tmp = tmp.Substring(0, lastPos + 1);
+				prefix += ".." + seperator.ToString();
+			}
+
+			return endPath;
+		}
+
+		/// <summary>
+		/// Resolves the path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <returns></returns>
+		public static string ResolvePath(string path)
+		{
+			string tmpPath = NormalizePath(path);
+			if(tmpPath.Length < 1)
+			{
+				tmpPath = ".";
+			}
+            
+			tmpPath = Path.GetFullPath(tmpPath);
+			if(!File.Exists(tmpPath) && !Directory.Exists(tmpPath))
+			{
+				throw new ArgumentException("Path could not be resolved: " + tmpPath);
+			}
+
+			return tmpPath;
+		}
+
+		/// <summary>
+		/// Normalizes the path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <param name="separatorCharacter">The separator character.</param>
+		/// <returns></returns>
+		public static string NormalizePath(string path, char separatorCharacter)
+		{
+			if(path == null || path == "" || path.Length < 1)
+			{
+				return "";
+			}
+
+			string tmpPath = path.Replace('\\', '/');
+			tmpPath = tmpPath.Replace('/', separatorCharacter);
+			return tmpPath;
+		}
+
+		/// <summary>
+		/// Normalizes the path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <returns></returns>
+		public static string NormalizePath(string path)
+		{
+			return NormalizePath(path, Path.DirectorySeparatorChar);
+		}
+        
+		/// <summary>
+		/// Ends the path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <param name="separatorCharacter">The separator character.</param>
+		/// <returns></returns>
+		public static string EndPath(string path, char separatorCharacter)
+		{
+			if(path == null || path == "" || path.Length < 1)
+			{
+				return "";
+			}
+
+			if(!path.EndsWith(separatorCharacter.ToString()))
+			{
+				return (path + separatorCharacter);
+			}
+
+			return path;
+		}
+
+		/// <summary>
+		/// Ends the path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <returns></returns>
+		public static string EndPath(string path)
+		{
+			return EndPath(path, Path.DirectorySeparatorChar);
+		}
+
+		/// <summary>
+		/// Makes the file path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <param name="name">The name.</param>
+		/// <param name="ext">The ext.</param>
+		/// <returns></returns>
+		public static string MakeFilePath(string path, string name, string ext)
+		{
+			string ret = EndPath(NormalizePath(path));
+            
+			if( name == null )
+			{
+				throw new ArgumentNullException("name");
+			}
+
+			ret += name;
+			if(!name.EndsWith("." + ext))
+			{
+				ret += "." + ext;
+			}
+            
             //foreach(char c in Path.GetInvalidPathChars())
             //{
             //    ret = ret.Replace(c, '_');
             //}
 
-            return ret;
-        }
-
-        /// <summary>
-        /// Makes the file path.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="name">The name.</param>
-        /// <returns></returns>
-        public static string MakeFilePath(string path, string name)
-        {
-            string ret = EndPath(NormalizePath(path));
-
-            if( name == null )
-            {
-                throw new ArgumentNullException("name");
-            }
-
-            ret += name;
+			return ret;
+		}
+
+		/// <summary>
+		/// Makes the file path.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		/// <param name="name">The name.</param>
+		/// <returns></returns>
+		public static string MakeFilePath(string path, string name)
+		{
+			string ret = EndPath(NormalizePath(path));
+            
+			if( name == null )
+			{
+				throw new ArgumentNullException("name");
+			}
+
+			ret += name;
 
             //foreach (char c in Path.GetInvalidPathChars())
             //{
             //    ret = ret.Replace(c, '_');
             //}
 
-            return ret;
-        }
+			return ret;
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="path"></param>
-        /// <returns></returns>
-        public static string MakeReferencePath(string path)
-        {
-            string ret = EndPath(NormalizePath(path));
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="path"></param>
+		/// <returns></returns>
+		public static string MakeReferencePath(string path)
+		{
+			string ret = EndPath(NormalizePath(path));
 
             //foreach (char c in Path.GetInvalidPathChars())
             //{
             //    ret = ret.Replace(c, '_');
             //}
 
-            return ret;
-        }
-
-        /// <summary>
-        /// Sets the current dir.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        public static void SetCurrentDir(string path)
-        {
-            if( path == null )
-            {
-                throw new ArgumentNullException("path");
-            }
-            if(path.Length < 1)
-            {
-                return;
-            }
-
-            Environment.CurrentDirectory = path;
-        }
-
-        /// <summary>
-        /// Checks the type.
-        /// </summary>
-        /// <param name="typeToCheck">The type to check.</param>
-        /// <param name="attr">The attr.</param>
-        /// <param name="inter">The inter.</param>
-        /// <returns></returns>
-        public static object CheckType(Type typeToCheck, Type attr, Type inter)
-        {
-            if(typeToCheck == null || attr == null)
-            {
-                return null;
-            }
-
-            object[] attrs = typeToCheck.GetCustomAttributes(attr, false);
-            if(attrs == null || attrs.Length < 1)
-            {
-                return null;
-            }
-            if( inter == null )
-            {
-                throw new ArgumentNullException("inter");
-            }
-
-            if(typeToCheck.GetInterface(inter.FullName) == null)
-            {
-                return null;
-            }
-
-            return attrs[0];
-        }
-
-        /// <summary>
-        /// Attributes the value.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        /// <param name="attr">The attr.</param>
-        /// <param name="def">The def.</param>
-        /// <returns></returns>
-        public static string AttributeValue(XmlNode node, string attr, string def)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-            if(node.Attributes[attr] == null)
-            {
-                return def;
-            }
-            string val = node.Attributes[attr].Value;
-            if(!CheckForOSVariables)
-            {
-                return val;
-            }
-
-            return InterpolateForEnvironmentVariables(val);
-        }
-
-        /// <summary>
-        /// Parses the boolean.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        /// <param name="attr">The attr.</param>
-        /// <param name="defaultValue">if set to <c>true</c> [default value].</param>
-        /// <returns></returns>
-        public static bool ParseBoolean(XmlNode node, string attr, bool defaultValue)
-        {
-            if( node == null )
-            {
-                throw new ArgumentNullException("node");
-            }
-            if(node.Attributes[attr] == null)
-            {
-                return defaultValue;
-            }
-            return bool.Parse(node.Attributes[attr].Value);
-        }
-
-        /// <summary>
-        /// Enums the attribute value.
-        /// </summary>
-        /// <param name="node">The node.</param>
-        /// <param name="attr">The attr.</param>
-        /// <param name="enumType">Type of the enum.</param>
-        /// <param name="def">The def.</param>
-        /// <returns></returns>
-        public static object EnumAttributeValue(XmlNode node, string attr, Type enumType, object def)
-        {
-            if( def == null )
-            {
-                throw new ArgumentNullException("def");
-            }
-            string val = AttributeValue(node, attr, def.ToString());
-            return Enum.Parse(enumType, val, true);
-        }
-
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="assemblyName"></param>
-        /// <param name="projectType"></param>
-        /// <returns></returns>
-        public static string AssemblyFullName(string assemblyName, ProjectType projectType)
-        {
-            return assemblyName + (projectType == ProjectType.Library ? ".dll" : ".exe");
-        }
-
-        #endregion
-    }
+			return ret;
+		}
+
+		/// <summary>
+		/// Sets the current dir.
+		/// </summary>
+		/// <param name="path">The path.</param>
+		public static void SetCurrentDir(string path)
+		{
+			if( path == null )
+			{
+				throw new ArgumentNullException("path");
+			}
+			if(path.Length < 1)
+			{
+				return;
+			}
+
+			Environment.CurrentDirectory = path;
+		}
+
+		/// <summary>
+		/// Checks the type.
+		/// </summary>
+		/// <param name="typeToCheck">The type to check.</param>
+		/// <param name="attr">The attr.</param>
+		/// <param name="inter">The inter.</param>
+		/// <returns></returns>
+		public static object CheckType(Type typeToCheck, Type attr, Type inter)
+		{
+			if(typeToCheck == null || attr == null)
+			{
+				return null;
+			}
+
+			object[] attrs = typeToCheck.GetCustomAttributes(attr, false);
+			if(attrs == null || attrs.Length < 1)
+			{
+				return null;
+			}
+			if( inter == null )
+			{
+				throw new ArgumentNullException("inter");
+			}
+
+			if(typeToCheck.GetInterface(inter.FullName) == null)
+			{
+				return null;
+			}
+
+			return attrs[0];
+		}
+
+		/// <summary>
+		/// Attributes the value.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		/// <param name="attr">The attr.</param>
+		/// <param name="def">The def.</param>
+		/// <returns></returns>
+		public static string AttributeValue(XmlNode node, string attr, string def)
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+			if(node.Attributes[attr] == null)
+			{
+				return def;
+			}
+			string val = node.Attributes[attr].Value;
+			if(!CheckForOSVariables)
+			{
+				return val;
+			}
+
+			return InterpolateForEnvironmentVariables(val);
+		}
+
+		/// <summary>
+		/// Parses the boolean.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		/// <param name="attr">The attr.</param>
+		/// <param name="defaultValue">if set to <c>true</c> [default value].</param>
+		/// <returns></returns>
+		public static bool ParseBoolean(XmlNode node, string attr, bool defaultValue) 
+		{
+			if( node == null )
+			{
+				throw new ArgumentNullException("node");
+			}
+			if(node.Attributes[attr] == null)
+			{
+				return defaultValue;
+			}
+			return bool.Parse(node.Attributes[attr].Value);
+		}
+
+		/// <summary>
+		/// Enums the attribute value.
+		/// </summary>
+		/// <param name="node">The node.</param>
+		/// <param name="attr">The attr.</param>
+		/// <param name="enumType">Type of the enum.</param>
+		/// <param name="def">The def.</param>
+		/// <returns></returns>
+		public static object EnumAttributeValue(XmlNode node, string attr, Type enumType, object def)
+		{
+			if( def == null )
+			{
+				throw new ArgumentNullException("def");
+			}
+			string val = AttributeValue(node, attr, def.ToString());
+			return Enum.Parse(enumType, val, true);
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="assemblyName"></param>
+		/// <param name="projectType"></param>
+		/// <returns></returns>
+		public static string AssemblyFullName(string assemblyName, ProjectType projectType)
+		{
+			return assemblyName + (projectType == ProjectType.Library ? ".dll" : ".exe");
+		}
+
+		#endregion
+	}
 }

+ 217 - 217
Prebuild/src/Core/Utilities/Log.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -28,74 +28,74 @@ using System.IO;
 
 namespace Prebuild.Core.Utilities
 {
-    /// <summary>
-    ///
-    /// </summary>
-    public enum LogType
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        None,
-        /// <summary>
-        ///
-        /// </summary>
-        Info,
-        /// <summary>
-        ///
-        /// </summary>
-        Warning,
-        /// <summary>
-        ///
-        /// </summary>
-        Error
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	public enum LogType
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		None,
+		/// <summary>
+		/// 
+		/// </summary>
+		Info,
+		/// <summary>
+		/// 
+		/// </summary>
+		Warning,
+		/// <summary>
+		/// 
+		/// </summary>
+		Error
+	}
 
-    /// <summary>
-    ///
-    /// </summary>
-    [Flags]
-    public enum LogTargets
-    {
-        /// <summary>
-        ///
-        /// </summary>
-        None = 0,
-        /// <summary>
-        ///
-        /// </summary>
-        Null = 1,
-        /// <summary>
-        ///
-        /// </summary>
-        File = 2,
-        /// <summary>
-        ///
-        /// </summary>
-        Console = 4
-    }
+	/// <summary>
+	/// 
+	/// </summary>
+	[Flags]
+	public enum LogTargets
+	{
+		/// <summary>
+		/// 
+		/// </summary>
+		None = 0,
+		/// <summary>
+		/// 
+		/// </summary>
+		Null = 1,
+		/// <summary>
+		/// 
+		/// </summary>
+		File = 2,
+		/// <summary>
+		/// 
+		/// </summary>
+		Console = 4
+	}
 
-    /// <summary>
-    /// Summary description for Log.
-    /// </summary>
-    public class Log : IDisposable
-    {
-        #region Fields
+	/// <summary>
+	/// Summary description for Log.
+	/// </summary>
+	public class Log : IDisposable
+	{
+		#region Fields
 
-        private TextWriter m_Writer;
-        private LogTargets m_Target = LogTargets.Null;
-        bool disposed;
+		private TextWriter m_Writer;
+		private LogTargets m_Target = LogTargets.Null;
+		bool disposed;
 
-        #endregion
+		#endregion
 
-        #region Constructors
+		#region Constructors
 
-        /// <summary>
-        /// Initializes a new instance of the <see cref="Log"/> class.
-        /// </summary>
-        /// <param name="target">The target.</param>
-        /// <param name="fileName">Name of the file.</param>
-        public Log(LogTargets target, string fileName)
+		/// <summary>
+		/// Initializes a new instance of the <see cref="Log"/> class.
+		/// </summary>
+		/// <param name="target">The target.</param>
+		/// <param name="fileName">Name of the file.</param>
+		public Log(LogTargets target, string fileName)
         {
             m_Target = target;
 
@@ -111,166 +111,166 @@ namespace Prebuild.Core.Utilities
             }
         }
 
-        #endregion
+		#endregion
 
-        #region Public Methods
+		#region Public Methods
 
-        /// <summary>
-        /// Writes this instance.
-        /// </summary>
-        public void Write()
-        {
-            Write(string.Empty);
-        }
+		/// <summary>
+		/// Writes this instance.
+		/// </summary>
+		public void Write() 
+		{
+			Write(string.Empty);
+		}
 
-        /// <summary>
-        /// Writes the specified MSG.
-        /// </summary>
-        /// <param name="msg">The MSG.</param>
-        public void Write(string msg)
-        {
-            if((m_Target & LogTargets.Null) != 0)
-            {
-                return;
-            }
+		/// <summary>
+		/// Writes the specified MSG.
+		/// </summary>
+		/// <param name="msg">The MSG.</param>
+		public void Write(string msg) 
+		{
+			if((m_Target & LogTargets.Null) != 0)
+			{
+				return;
+			}
 
-            if((m_Target & LogTargets.Console) != 0)
-            {
-                Console.WriteLine(msg);
-            }
-            if((m_Target & LogTargets.File) != 0 && m_Writer != null)
-            {
-                m_Writer.WriteLine(msg);
-            }
-        }
+			if((m_Target & LogTargets.Console) != 0)
+			{
+				Console.WriteLine(msg);
+			}
+			if((m_Target & LogTargets.File) != 0 && m_Writer != null)
+			{
+				m_Writer.WriteLine(msg);
+			}
+		}
 
-        /// <summary>
-        /// Writes the specified format.
-        /// </summary>
-        /// <param name="format">The format.</param>
-        /// <param name="args">The args.</param>
-        public void Write(string format, params object[] args)
-        {
-            Write(string.Format(format,args));
-        }
+		/// <summary>
+		/// Writes the specified format.
+		/// </summary>
+		/// <param name="format">The format.</param>
+		/// <param name="args">The args.</param>
+		public void Write(string format, params object[] args)
+		{
+			Write(string.Format(format,args));
+		}
 
-        /// <summary>
-        /// Writes the specified type.
-        /// </summary>
-        /// <param name="type">The type.</param>
-        /// <param name="format">The format.</param>
-        /// <param name="args">The args.</param>
-        public void Write(LogType type, string format, params object[] args)
-        {
-            if((m_Target & LogTargets.Null) != 0)
-            {
-                return;
-            }
+		/// <summary>
+		/// Writes the specified type.
+		/// </summary>
+		/// <param name="type">The type.</param>
+		/// <param name="format">The format.</param>
+		/// <param name="args">The args.</param>
+		public void Write(LogType type, string format, params object[] args)
+		{
+			if((m_Target & LogTargets.Null) != 0)
+			{
+				return;
+			}
 
-            string str = "";
-            switch(type)
-            {
-                case LogType.Info:
-                    str = "[I] ";
-                    break;
-                case LogType.Warning:
-                    str = "[!] ";
-                    break;
-                case LogType.Error:
-                    str = "[X] ";
-                    break;
-            }
+			string str = "";
+			switch(type) 
+			{
+				case LogType.Info:
+					str = "[I] "; 
+					break;
+				case LogType.Warning:
+					str = "[!] "; 
+					break;
+				case LogType.Error:
+					str = "[X] "; 
+					break;
+			}
 
-            Write(str + format,args);
-        }
+			Write(str + format,args);
+		}
 
-        /// <summary>
-        /// Writes the exception.
-        /// </summary>
-        /// <param name="type">The type.</param>
-        /// <param name="ex">The ex.</param>
-        public void WriteException(LogType type, Exception ex)
-        {
-            if(ex != null)
-            {
-                Write(type, ex.Message);
-                //#if DEBUG
-                m_Writer.WriteLine("Exception @{0} stack trace [[", ex.TargetSite.Name);
-                m_Writer.WriteLine(ex.StackTrace);
-                m_Writer.WriteLine("]]");
-                //#endif
-            }
-        }
+		/// <summary>
+		/// Writes the exception.
+		/// </summary>
+		/// <param name="type">The type.</param>
+		/// <param name="ex">The ex.</param>
+		public void WriteException(LogType type, Exception ex)
+		{
+			if(ex != null)
+			{
+				Write(type, ex.Message);
+				//#if DEBUG
+				m_Writer.WriteLine("Exception @{0} stack trace [[", ex.TargetSite.Name);
+				m_Writer.WriteLine(ex.StackTrace);
+				m_Writer.WriteLine("]]");
+				//#endif
+			}
+		}
 
-        /// <summary>
-        /// Flushes this instance.
-        /// </summary>
-        public void Flush()
-        {
-            if(m_Writer != null)
-            {
-                m_Writer.Flush();
-            }
-        }
+		/// <summary>
+		/// Flushes this instance.
+		/// </summary>
+		public void Flush()
+		{
+			if(m_Writer != null)
+			{
+				m_Writer.Flush();
+			}
+		}
 
-        #endregion
+		#endregion
 
-        #region IDisposable Members
-
-        /// <summary>
-        /// Performs application-defined tasks associated with freeing, releasing, or
-        /// resetting unmanaged resources.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
+		#region IDisposable Members
 
-        /// <summary>
-        /// Dispose objects
-        /// </summary>
-        /// <param name="disposing">
-        /// If true, it will dispose close the handle
-        /// </param>
-        /// <remarks>
-        /// Will dispose managed and unmanaged resources.
-        /// </remarks>
-        protected virtual void Dispose(bool disposing)
-        {
-            if (!this.disposed)
-            {
-                if (disposing)
-                {
-                    if (m_Writer != null)
-                    {
-                        m_Writer.Close();
-                        m_Writer = null;
-                    }
-                }
-            }
-            this.disposed = true;
-        }
+		/// <summary>
+		/// Performs application-defined tasks associated with freeing, releasing, or
+		/// resetting unmanaged resources.
+		/// </summary>
+		public void Dispose()
+		{
+			Dispose(true);
+			GC.SuppressFinalize(this);
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        ~Log()
-        {
-            this.Dispose(false);
-        }
+		/// <summary>
+		/// Dispose objects
+		/// </summary>
+		/// <param name="disposing">
+		/// If true, it will dispose close the handle
+		/// </param>
+		/// <remarks>
+		/// Will dispose managed and unmanaged resources.
+		/// </remarks>
+		protected virtual void Dispose(bool disposing)
+		{
+			if (!this.disposed)
+			{
+				if (disposing)
+				{
+					if (m_Writer != null)
+					{
+						m_Writer.Close();
+						m_Writer = null;
+					}
+				}
+			}
+			this.disposed = true;
+		}
 
-        /// <summary>
-        /// Closes and destroys this object
-        /// </summary>
-        /// <remarks>
-        /// Same as Dispose(true)
-        /// </remarks>
-        public void Close()
-        {
-            Dispose();
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		~Log()
+		{
+			this.Dispose(false);
+		}
+		
+		/// <summary>
+		/// Closes and destroys this object
+		/// </summary>
+		/// <remarks>
+		/// Same as Dispose(true)
+		/// </remarks>
+		public void Close() 
+		{
+			Dispose();
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 56 - 56
Prebuild/src/Core/WarningException.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005 Matthew Holmes ([email protected]), Dan Moorehea
 Redistribution and use in source and binary forms, with or without modification, are permitted
 provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this list of conditions
-  and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions
-  and the following disclaimer in the documentation and/or other materials provided with the
-  distribution.
-* The name of the author may not be used to endorse or promote products derived from this software
-  without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this list of conditions 
+  and the following disclaimer. 
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions 
+  and the following disclaimer in the documentation and/or other materials provided with the 
+  distribution. 
+* The name of the author may not be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
@@ -28,57 +28,57 @@ using System.Runtime.Serialization;
 
 namespace Prebuild.Core
 {
-    /// <summary>
-    ///
-    /// </summary>
-    [Serializable]
-    public class WarningException : Exception
-    {
-        #region Constructors
+	/// <summary>
+	/// 
+	/// </summary>
+	[Serializable]
+	public class WarningException : Exception
+	{
+		#region Constructors
 
-        /// <summary>
-        ///
-        /// </summary>
-        public WarningException()
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		public WarningException()
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="format"></param>
-        /// <param name="args"></param>
-        public WarningException(string format, params object[] args)
-            : base(String.Format(format, args))
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="format"></param>
+		/// <param name="args"></param>
+		public WarningException(string format, params object[] args)
+			: base(String.Format(format, args))
+		{
+		}
 
-        /// <summary>
-        /// Exception with specified string
-        /// </summary>
-        /// <param name="message">Exception message</param>
-        public WarningException(string message): base(message)
-        {
-        }
+		/// <summary>
+		/// Exception with specified string
+		/// </summary>
+		/// <param name="message">Exception message</param>
+		public WarningException(string message): base(message)
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="exception"></param>
-        public WarningException(string message, Exception exception) : base(message, exception)
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="message"></param>
+		/// <param name="exception"></param>
+		public WarningException(string message, Exception exception) : base(message, exception)
+		{
+		}
 
-        /// <summary>
-        ///
-        /// </summary>
-        /// <param name="info"></param>
-        /// <param name="context"></param>
-        protected WarningException(SerializationInfo info, StreamingContext context) : base( info, context )
-        {
-        }
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="info"></param>
+		/// <param name="context"></param>
+		protected WarningException(SerializationInfo info, StreamingContext context) : base( info, context )
+		{
+		}
 
-        #endregion
-    }
+		#endregion
+	}
 }

+ 118 - 118
Prebuild/src/Prebuild.cs

@@ -5,16 +5,16 @@ Copyright (c) 2004-2005	Matthew	Holmes ([email protected]),	Dan	Moorehea
 Redistribution and use in source and binary	forms, with	or without modification, are permitted
 provided that the following	conditions are met:
 
-* Redistributions of source	code must retain the above copyright notice, this list of conditions
-  and the following	disclaimer.
-* Redistributions in binary	form must reproduce	the	above copyright	notice,	this list of conditions
-  and the following	disclaimer in the documentation	and/or other materials provided	with the
-  distribution.
-* The name of the author may not be	used to	endorse	or promote products	derived	from this software
-  without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR	``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-BUT	NOT	LIMITED	TO,	THE	IMPLIED	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A	PARTICULAR PURPOSE
+* Redistributions of source	code must retain the above copyright notice, this list of conditions 
+  and the following	disclaimer.	
+* Redistributions in binary	form must reproduce	the	above copyright	notice,	this list of conditions	
+  and the following	disclaimer in the documentation	and/or other materials provided	with the 
+  distribution.	
+* The name of the author may not be	used to	endorse	or promote products	derived	from this software 
+  without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR	``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,	
+BUT	NOT	LIMITED	TO,	THE	IMPLIED	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A	PARTICULAR PURPOSE 
 ARE	DISCLAIMED.	IN NO EVENT	SHALL THE AUTHOR BE	LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 EXEMPLARY, OR CONSEQUENTIAL	DAMAGES	(INCLUDING,	BUT	NOT	LIMITED	TO,	PROCUREMENT	OF SUBSTITUTE GOODS
 OR SERVICES; LOSS OF USE, DATA,	OR PROFITS;	OR BUSINESS	INTERRUPTION) HOWEVER CAUSED AND ON	ANY	THEORY
@@ -42,50 +42,50 @@ using System.EnterpriseServices.Internal;
 using Prebuild.Core;
 using Prebuild.Core.Utilities;
 
-namespace Prebuild
+namespace Prebuild 
 {
-    /// <summary>
-    ///
-    /// </summary>
-    class Prebuild
-    {
-        #region	Main
-
-        [STAThread]
-        static void	Main(string[] args)
-        {
-            Kernel	kernel = null;
-            try
-            {
-                kernel = Kernel.Instance;
-                kernel.Initialize(LogTargets.File | LogTargets.Console, args);
-                bool exit =	false;
-
-                if(kernel.CommandLine.WasPassed("usage"))
-                {
-                    exit = true;
-                    OutputUsage();
-                }
-                if(kernel.CommandLine.WasPassed("showtargets"))
-                {
-                    exit = true;
-                    OutputTargets(kernel);
-                }
-                if(kernel.CommandLine.WasPassed("install"))
-                {
-                    exit = true;
-                    InstallAssembly(kernel);
-                }
-                if(kernel.CommandLine.WasPassed("remove"))
-                {
-                    exit = true;
-                    RemoveAssembly(kernel);
-                }
-
-                if(!exit)
-                {
-                    kernel.Process();
-                }
+	/// <summary>
+	/// 
+	/// </summary>
+	class Prebuild
+	{
+		#region	Main
+
+		[STAThread]
+		static void	Main(string[] args)	
+		{
+			Kernel	kernel = null;
+			try	
+			{
+				kernel = Kernel.Instance;
+				kernel.Initialize(LogTargets.File | LogTargets.Console, args);
+				bool exit =	false;
+
+				if(kernel.CommandLine.WasPassed("usage")) 
+				{
+					exit = true;
+					OutputUsage();
+				}
+				if(kernel.CommandLine.WasPassed("showtargets"))	
+				{
+					exit = true;
+					OutputTargets(kernel);
+				}
+				if(kernel.CommandLine.WasPassed("install")) 
+				{
+					exit = true;
+					InstallAssembly(kernel);
+				}
+				if(kernel.CommandLine.WasPassed("remove")) 
+				{
+					exit = true;
+					RemoveAssembly(kernel);
+				}
+
+				if(!exit)
+				{
+					kernel.Process();
+				}
             }
 #if !DEBUG
             catch (Exception ex)
@@ -96,70 +96,70 @@ namespace Prebuild
 #endif
             finally
             {
-                if(kernel != null && kernel.PauseAfterFinish)
-                {
-                    Console.WriteLine("\nPress enter to continue...");
-                    Console.ReadLine();
-                }
-            }
-        }
-
-        #endregion
-
-        #region	Private	Methods
-
-        private static void InstallAssembly(Kernel kernel)
-        {
-            Publish publish = new Publish();
-            string file = kernel.CommandLine["install"];
+				if(kernel != null && kernel.PauseAfterFinish)	
+				{
+					Console.WriteLine("\nPress enter to continue...");
+					Console.ReadLine();
+				}
+			}
+		}
+
+		#endregion
+
+		#region	Private	Methods
+
+		private static void InstallAssembly(Kernel kernel)
+		{
+			Publish publish = new Publish();
+			string file = kernel.CommandLine["install"];
             //Console.WriteLine(".."+file+"..");
-            publish.GacInstall(file);
-        }
-
-        private static void RemoveAssembly(Kernel kernel)
-        {
-            Publish publish = new Publish();
-            string file = kernel.CommandLine["remove"];
-            publish.GacRemove(file);
-        }
-
-        private	static void	OutputUsage()
-        {
-            Console.WriteLine("Usage: prebuild /target <target> [options]");
-            Console.WriteLine("Available command-line switches:");
-            Console.WriteLine();
-            Console.WriteLine("/target          Target for Prebuild");
-            Console.WriteLine("/clean           Clean the build files for the given target");
-            Console.WriteLine("/file            XML file to process");
-            Console.WriteLine("/log             Log file to write to");
-            Console.WriteLine("/ppo             Pre-process the file, but perform no other processing");
-            Console.WriteLine("/pause           Pauses the application after execution to view the output");
-            Console.WriteLine("/yes             Default to yes to any questions asked");
-            Console.WriteLine("/install         Install assembly into the GAC");
-            Console.WriteLine("/remove          Remove assembly from the GAC");
-            Console.WriteLine();
-            Console.WriteLine("See 'prebuild /showtargets for a list of available targets");
-            Console.WriteLine("See readme.txt or check out http://dnpb.sourceforge.net for more information");
-            Console.WriteLine();
-        }
-
-        private	static void	OutputTargets(Kernel kern)
-        {
-            Console.WriteLine("Targets available in Prebuild:");
-            Console.WriteLine("");
-            if(kern.Targets.Keys.Count > 0)
-            {
-                string[] targs = new string[kern.Targets.Keys.Count];
-                kern.Targets.Keys.CopyTo(targs,	0);
-                Array.Sort(targs);
-                foreach(string target in targs)
-                {
-                    Console.WriteLine(target);
-                }
-            }
-            Console.WriteLine("");
-        }
-
-        #endregion
-    }
+			publish.GacInstall(file);
+		}
+
+		private static void RemoveAssembly(Kernel kernel)
+		{
+			Publish publish = new Publish();
+			string file = kernel.CommandLine["remove"];
+			publish.GacRemove(file);
+		}
+
+		private	static void	OutputUsage() 
+		{
+			Console.WriteLine("Usage: prebuild /target <target> [options]");
+			Console.WriteLine("Available command-line switches:");
+			Console.WriteLine();
+			Console.WriteLine("/target          Target for Prebuild");
+			Console.WriteLine("/clean           Clean the build files for the given target");
+			Console.WriteLine("/file            XML file to process");
+			Console.WriteLine("/log             Log file to write to");
+			Console.WriteLine("/ppo             Pre-process the file, but perform no other processing");
+			Console.WriteLine("/pause           Pauses the application after execution to view the output");
+			Console.WriteLine("/yes             Default to yes to any questions asked");
+			Console.WriteLine("/install         Install assembly into the GAC");
+			Console.WriteLine("/remove          Remove assembly from the GAC");
+			Console.WriteLine();
+			Console.WriteLine("See 'prebuild /showtargets for a list of available targets");
+			Console.WriteLine("See readme.txt or check out http://dnpb.sourceforge.net for more information");
+			Console.WriteLine();
+		}
+
+		private	static void	OutputTargets(Kernel kern)
+		{
+			Console.WriteLine("Targets available in Prebuild:");
+			Console.WriteLine("");
+			if(kern.Targets.Keys.Count > 0)
+			{
+				string[] targs = new string[kern.Targets.Keys.Count];
+				kern.Targets.Keys.CopyTo(targs,	0);
+				Array.Sort(targs);
+				foreach(string target in targs)
+				{
+					Console.WriteLine(target);
+				}
+			}
+			Console.WriteLine("");
+		}
+		
+		#endregion
+	}
 }

+ 13 - 12
Prebuild/src/Properties/AssemblyInfo.cs

@@ -52,7 +52,7 @@ using System.Resources;
 [assembly: CLSCompliant(true)]
 
 //
-// General Information about an assembly is controlled through the following
+// General Information about an assembly is controlled through the following 
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
 //
@@ -61,50 +61,51 @@ using System.Resources;
 [assembly: AssemblyConfiguration(".NET CLR")]
 [assembly: AssemblyCompany("The Prebuild Project")]
 [assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("Copyright 2004-2013 " +
+[assembly: AssemblyCopyright("Copyright 2004-2015 " +
                              "Matthew Holmes, " +
                              "Dan Moorehead, " +
                              "C.J. Adams-Collier, " +
                              "Rob Loach, " +
                              "David Hudson," +
-                             "John Hurliman")]
+                             "John Hurliman" +
+                             "WhiteCore Development")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 [assembly: NeutralResourcesLanguageAttribute("en-US")]
-[assembly: AssemblyVersion("2.0.6.*")]
+[assembly: AssemblyVersion("2.0.7.*")]
 
 //
 // Version information for an assembly consists of the following four values:
 //
 //      Major Version
-//      Minor Version
+//      Minor Version 
 //      Build Number
 //      Revision
 //
-// You can specify all the values or you can default the Revision and Build Numbers
+// You can specify all the values or you can default the Revision and Build Numbers 
 // by using the '*' as shown below:
 
 //
-// In order to sign your assembly you must specify a key to use. Refer to the
+// In order to sign your assembly you must specify a key to use. Refer to the 
 // Microsoft .NET Framework documentation for more information on assembly signing.
 //
-// Use the attributes below to control which key is used for signing.
+// Use the attributes below to control which key is used for signing. 
 //
-// Notes:
+// Notes: 
 //   (*) If no key is specified, the assembly is not signed.
 //   (*) KeyName refers to a key that has been installed in the Crypto Service
 //       Provider (CSP) on your machine. KeyFile refers to a file which contains
 //       a key.
-//   (*) If the KeyFile and the KeyName values are both specified, the
+//   (*) If the KeyFile and the KeyName values are both specified, the 
 //       following processing occurs:
 //       (1) If the KeyName can be found in the CSP, that key is used.
-//       (2) If the KeyName does not exist and the KeyFile does exist, the key
+//       (2) If the KeyName does not exist and the KeyFile does exist, the key 
 //           in the KeyFile is installed into the CSP and used.
 //   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
 //       When specifying the KeyFile, the location of the KeyFile should be
 //       relative to the project output directory which is
 //       %Project Directory%\obj\<configuration>. For example, if your KeyFile is
-//       located in the project directory, you would specify the AssemblyKeyFile
+//       located in the project directory, you would specify the AssemblyKeyFile 
 //       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
 //   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
 //       documentation for more information on this.

BIN
bin/Prebuild.exe


Some files were not shown because too many files changed in this diff