rootSectionGroup.Initialize (this, rootGroup);
}
return rootSectionGroup;
- }
+ }
}
public ConfigurationSectionGroupCollection SectionGroups {
- get { return RootSectionGroup.SectionGroups; }
+ get { return RootSectionGroup.SectionGroups; }
}
public ConfigurationSectionCollection Sections {
ds.SectionHandler = secObj as IConfigurationSectionHandler;
sec = ds;
}
+ sec.Configuration = this;
- ConfigurationSection parentSection = parent != null ? parent.GetSectionInstance (config, true) : null;
+ ConfigurationSection parentSection = null;
+ if (parent != null) {
+ parentSection = parent.GetSectionInstance (config, true);
+ sec.SectionInformation.SetParentSection (parentSection);
+ }
+ sec.SectionInformation.ConfigFilePath = FilePath;
+ sec.ConfigContext = system.Host.CreateDeprecatedConfigContext(configPath);
+
string xml = data as string;
- if (xml == null && parentSection != null)
- xml = parentSection.RawXml;
sec.RawXml = xml;
sec.Reset (parentSection);
if (xml != null && xml == data) {
- XmlTextReader r = new XmlTextReader (new StringReader (xml));
+ XmlTextReader r = new ConfigXmlTextReader (new StringReader (xml), FilePath);
sec.DeserializeSection (r);
r.Close ();
+
+ if (!String.IsNullOrEmpty (sec.SectionInformation.ConfigSource) && !String.IsNullOrEmpty (FilePath))
+ sec.DeserializeConfigSource (Path.GetDirectoryName (FilePath));
}
elementData [config] = sec;
object ctx = sec.SectionInformation.AllowExeDefinition != ConfigurationAllowExeDefinition.MachineToApplication ? (object) sec.SectionInformation.AllowExeDefinition : (object) sec.SectionInformation.AllowDefinition;
throw new ConfigurationErrorsException ("The section <" + name + "> can't be defined in this configuration file (the allowed definition context is '" + ctx + "').");
}
-
+
if (sec.SectionInformation.Type == null)
sec.SectionInformation.Type = system.Host.GetConfigTypeName (sec.GetType ());
-
+
SectionInfo section = new SectionInfo (name, sec.SectionInformation);
section.StreamName = streamName;
section.ConfigHost = system.Host;
[MonoInternalNote ("Detect if file has changed")]
public void SaveAs (string filename, ConfigurationSaveMode mode, bool forceUpdateAll)
{
- string dir = Path.GetDirectoryName (filename);
+ string dir = Path.GetDirectoryName (Path.GetFullPath (filename));
if (!Directory.Exists (dir))
Directory.CreateDirectory (dir);
Save (new FileStream (filename, FileMode.OpenOrCreate, FileAccess.Write), mode, forceUpdateAll);
if (String.IsNullOrEmpty (streamName))
return true;
- XmlTextReader reader = null;
Stream stream = null;
+ // FIXME: we should remove this kind of hack that
+ // hides the actual error
try {
stream = system.Host.OpenStreamForRead (streamName);
} catch (Exception) {
return false;
}
- try {
- reader = new XmlTextReader (stream);
+ using (XmlTextReader reader = new ConfigXmlTextReader (stream, streamName)) {
ReadConfigFile (reader, streamName);
- } finally {
- if (reader != null)
- reader.Close();
}
return true;
}
-
- internal void ReadConfigFile (XmlTextReader reader, string fileName)
+ void ReadConfigFile (XmlReader reader, string fileName)
{
reader.MoveToContent ();
rootGroup.ReadRootData (reader, this, true);
}
-
- internal void ReadData (XmlTextReader reader, bool allowOverride)
+
+ internal void ReadData (XmlReader reader, bool allowOverride)
{
rootGroup.ReadData (this, reader, allowOverride);
}
- private void ThrowException (string text, XmlTextReader reader)
+ private void ThrowException (string text, XmlReader reader)
{
- throw new ConfigurationException (text, streamName, reader.LineNumber);
+ IXmlLineInfo li = reader as IXmlLineInfo;
+ throw new ConfigurationException (text, streamName, li != null ? li.LineNumber : 0);
}
}
}