internal ProtobuildStandardDefinition (ProtobuildModuleInfo modulel, ProtobuildDefinitionInfo definitionl, XmlDocument document, IProtobuildModule moduleObj) {
			module = modulel;
			definition = definitionl;
			this.document = document;
			this.moduleObj = moduleObj;

			Initialize(this);
		}
		protected ProtobuildNonStandardDefinition (ProtobuildModuleInfo modulel, ProtobuildDefinitionInfo definitionl, XmlDocument document, IProtobuildModule moduleObj)
        {
            module = modulel;
			definition = definitionl;
			this.document = document;
			this.moduleObj = moduleObj;

			Items = new ProjectItemCollection();

			Initialize(this);
		}
		public static IProtobuildDefinition CreateDefinition(ProtobuildModuleInfo modulel, ProtobuildDefinitionInfo definitionl, IProtobuildModule moduleObj)
		{
			var document = new XmlDocument ();
			document.Load(definitionl.DefinitionPath);

			switch (definitionl.Type) {
			case "External":
				return new ProtobuildExternalDefinition(modulel, definitionl, document, moduleObj);
			case "Content":
				return new ProtobuildContentDefinition(modulel, definitionl, document, moduleObj);
			default:
				return new ProtobuildStandardDefinition(modulel, definitionl, document, moduleObj);
			}
		}
		internal ProtobuildExternalDefinition (ProtobuildModuleInfo modulel, ProtobuildDefinitionInfo definitionl, XmlDocument document, IProtobuildModule moduleObj)
			: base(modulel, definitionl, document, moduleObj) {
			Initialize(this);
		}
            public ProtobuildModuleInfo LoadModule(string rootPath) 
			{
				var moduleInfoType = internalAssembly.GetType("Protobuild.ModuleInfo");
				var moduleInfoLoad = moduleInfoType.GetMethod("Load");
				dynamic moduleRef = moduleInfoLoad.Invoke(null, new object[] { Path.Combine(rootPath, "Build", "Module.xml") });

			    /*if (monitor != null) {
			        monitor.BeginStepTask ("Loading " + moduleRef.Name + "...", 1, 5);
			    }*/

			    var moduleInfo = new ProtobuildModuleInfo();
                moduleInfo.Name = moduleRef.Name;
				moduleInfo.Path = moduleRef.Path;
			    moduleInfo.DefaultAction = moduleRef.DefaultAction;
                moduleInfo.DefaultLinuxPlatforms = moduleRef.DefaultLinuxPlatforms;
                moduleInfo.DefaultWindowsPlatforms = moduleRef.DefaultWindowsPlatforms;
                moduleInfo.DefaultMacOSPlatforms = moduleRef.DefaultMacOSPlatforms;
                moduleInfo.DisableSynchronisation = moduleRef.DisableSynchronisation;
                moduleInfo.GenerateNuGetRepositories = moduleRef.GenerateNuGetRepositories;
                moduleInfo.SupportedPlatforms = moduleRef.SupportedPlatforms;
			    moduleInfo.DefaultStartupProject = moduleRef.DefaultStartupProject;

                moduleInfo.LoadedDefinitions = new List<ProtobuildDefinitionInfo> ();

			    foreach (var definition in moduleRef.GetDefinitions ()) {
			        var definitionInfo = new ProtobuildDefinitionInfo ();
					definitionInfo.Name = definition.Name;
					try
					{
						// Newer versions of Protobuild name this property RelativePath.
						definitionInfo.Path = definition.RelativePath;
					}
					catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ex)
					{
						definitionInfo.Path = definition.Path;
					}
			        definitionInfo.Type = definition.Type;
			        definitionInfo.DefinitionPath = definition.DefinitionPath;
			        definitionInfo.ModulePath = definition.ModulePath;
			        definitionInfo.SkipAutopackage = definition.SkipAutopackage;
			        moduleInfo.LoadedDefinitions.Add (definitionInfo);
                }

                moduleInfo.Packages = new List<ProtobuildPackageRef>();

                foreach (var package in moduleRef.Packages)
                {
                    var packageInfo = new ProtobuildPackageRef();
                    packageInfo.Uri = package.Uri;
                    packageInfo.GitRef = package.GitRef;
                    packageInfo.Folder = package.Folder;
                    moduleInfo.Packages.Add(packageInfo);
                }

			    moduleInfo.LoadedSubmodules = new List<ProtobuildModuleInfo> ();

			    foreach (var submodule in moduleRef.GetSubmodules ()) {
			        moduleInfo.LoadedSubmodules.Add (LoadModule (submodule.Path));
			    }

				return moduleInfo;
			}
 public ProtobuildDefinitionHandler (ProtobuildDefinitionInfo definitionl)
 {
     definition = definitionl;
 }