object ReadSolutionFolder(string file, IProgressMonitor monitor)
        {
            XmlTextReader reader = new XmlTextReader(new StreamReader(file));

            reader.MoveToContent();

            string version = reader.GetAttribute("version");

            if (version == null)
            {
                version = reader.GetAttribute("fileversion");
            }

            DataSerializer serializer = new DataSerializer(MD1ProjectService.DataContext, file);

            try {
                if (version != "2.0")
                {
                    throw new MD1UnknownProjectVersion(file, version);
                }
                ICombineReader combineReader = new CombineReaderV2(serializer, monitor, typeof(SolutionFolder));
                return(combineReader.ReadCombine(reader));
            } catch (Exception ex) {
                monitor.ReportError(GettextCatalog.GetString("Could not load solution: {0}", file), ex);
                throw;
            } finally {
                reader.Close();
            }
        }
		object ReadCombineFile (FilePath file, IProgressMonitor monitor)
		{
			XmlTextReader reader = new XmlTextReader (new StreamReader (file));
			reader.MoveToContent ();
			
			string version = reader.GetAttribute ("version");
			if (version == null) version = reader.GetAttribute ("fileversion");
			
			DataSerializer serializer = new DataSerializer (MD1ProjectService.DataContext, file);
			ICombineReader combineReader = null;
			
			if (version == "2.0" || version == "2.1")
				combineReader = new CombineReaderV2 (serializer, monitor, typeof(Solution));
			
			try {
				if (combineReader != null)
					return combineReader.ReadCombine (reader);
				else
					throw new MD1UnknownProjectVersion (file, version);
			} catch (Exception ex) {
				monitor.ReportError (GettextCatalog.GetString ("Could not load solution: {0}", file), ex);
				throw;
			} finally {
				reader.Close ();
			}
		}