public static Project openProject(string file)
 {
     if (file == null)
         throw new ArgumentException("Provided parameter 'file' is null");
     if (!File.Exists(file))
         throw new ArgumentException("Provided parameter 'file' is refering a not existing file");
     if (!file.EndsWith(".oosproj"))
         throw new ArgumentException("Provided parameter 'file' is refering a to a non .oosproj file");
     XmlDocument reader = new XmlDocument();
     reader.Load(file);
     XmlNode projectNode = reader.SelectSingleNode("/root/project");
     XmlNode compilerNode = reader.SelectSingleNode("/root/compiler");
     Project proj = new Project();
     proj._projectPath = file.Remove((file.Contains("\\") ? file.LastIndexOf('\\') : file.LastIndexOf('/')) + 1);
     foreach (XmlNode node in projectNode.ChildNodes)
     {
         if (node.Name.Equals("title", StringComparison.OrdinalIgnoreCase))
             proj.ProjectTitle = node.InnerText;
         else if (node.Name.Equals("author", StringComparison.OrdinalIgnoreCase))
             proj.Author = node.InnerText;
         else if (node.Name.Equals("mainfile", StringComparison.OrdinalIgnoreCase))
             proj.Mainfile = node.InnerText;
         else if (node.Name.Equals("outputfolder", StringComparison.OrdinalIgnoreCase))
             proj.OutputFolder = node.InnerText;
         else if (node.Name.Equals("buildfolder", StringComparison.OrdinalIgnoreCase))
             proj.Buildfolder = node.InnerText;
     }
     foreach (XmlAttribute att in compilerNode.Attributes)
     {
         if (att.Name.Equals("version", StringComparison.OrdinalIgnoreCase))
             proj.CompilerVersion = new Version(att.Value);
     }
     return proj;
 }