public object ReadFile(string file, IProgressMonitor monitor)
        {
            XmlTextReader reader = new XmlTextReader (new StreamReader (file));
            try {
                monitor.BeginTask (string.Format (GettextCatalog.GetString ("Loading project: {0}"), file), 1);

                reader.MoveToContent ();

                XmlDataSerializer ser = new XmlDataSerializer (Runtime.ProjectService.DataContext);
                ser.SerializationContext.BaseFile = file;

                CombineEntry entry = (CombineEntry) ser.Deserialize (reader, typeof(NUnitAssemblyGroupProject));
                entry.FileName = file;
                return entry;
            }
            catch (Exception ex) {
                monitor.ReportError (string.Format (GettextCatalog.GetString ("Could not load project: {0}"), file), ex);
                throw;
            }
            finally {
                monitor.EndTask ();
                reader.Close ();
            }
        }
        public void WriteFile(string file, object node, IProgressMonitor monitor)
        {
            Project project = node as Project;
            if (project == null)
                throw new InvalidOperationException ("The provided object is not a Project");

            StreamWriter sw = new StreamWriter (file);
            try {
                monitor.BeginTask (string.Format (GettextCatalog.GetString("Saving project: {0}"), file), 1);
                XmlDataSerializer ser = new XmlDataSerializer (Runtime.ProjectService.DataContext);
                ser.SerializationContext.BaseFile = file;
                ser.Serialize (sw, project, typeof(Project));
            } catch (Exception ex) {
                monitor.ReportError (string.Format (GettextCatalog.GetString ("Could not save project: {0}"), file), ex);
            } finally {
                monitor.EndTask ();
                sw.Close ();
            }
        }