Author: mhabersack
Date: 2008-02-20 14:49:13 -0500 (Wed, 20 Feb 2008)
New Revision: 96297
Modified:
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ChangeLog
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationElement.cs
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationSection.cs
Log:
Backport of r96296
Modified:
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ChangeLog
===================================================================
---
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ChangeLog
2008-02-20 19:46:40 UTC (rev 96296)
+++
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ChangeLog
2008-02-20 19:49:13 UTC (rev 96297)
@@ -1,3 +1,14 @@
+2008-02-20 Marek Habersack <[EMAIL PROTECTED]>
+
+ * ConfigurationSection.cs: support the "configSource" attribute
+ when deserializing a section. Contents of the file (if it exists)
+ replaces the previous section contents.
+
+ * ConfigurationElement.cs: ignore the "configSource" attribute if we're
a
+ ConfigurationSection instance.
+ HasValues () returns true only if any of the properties has the
+ origin set to SetHere.
+
2008-01-16 Zoltan Varga <[EMAIL PROTECTED]>
* ConfigurationElement.cs: Allow non-public constructors. Fixes #353554.
Modified:
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationElement.cs
===================================================================
---
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationElement.cs
2008-02-20 19:46:40 UTC (rev 96296)
+++
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationElement.cs
2008-02-20 19:49:13 UTC (rev 96297)
@@ -269,8 +269,9 @@
internal virtual bool HasValues ()
{
foreach (PropertyInformation pi in
ElementInformation.Properties)
- if (pi.ValueOrigin !=
PropertyValueOrigin.Default)
+ if (pi.ValueOrigin ==
PropertyValueOrigin.SetHere)
return true;
+
return false;
}
@@ -301,8 +302,9 @@
}
else if (reader.LocalName == "xmlns") {
/* ignore */
- }
- else if
(!OnDeserializeUnrecognizedAttribute (reader.LocalName, reader.Value))
+ } else if (this is ConfigurationSection
&& reader.LocalName == "configSource") {
+ /* ignore */
+ } else if
(!OnDeserializeUnrecognizedAttribute (reader.LocalName, reader.Value))
throw new
ConfigurationException ("Unrecognized attribute '" + reader.LocalName + "'.");
continue;
Modified:
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationSection.cs
===================================================================
---
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationSection.cs
2008-02-20 19:46:40 UTC (rev 96296)
+++
branches/mono-1-9/mcs/class/System.Configuration/System.Configuration/ConfigurationSection.cs
2008-02-20 19:49:13 UTC (rev 96297)
@@ -45,7 +45,7 @@
protected ConfigurationSection ()
{
}
-
+
internal IConfigurationSectionHandler SectionHandler {
get { return section_handler; }
set { section_handler = value; }
@@ -101,15 +101,21 @@
{
reader.MoveToContent ();
+ string protection_provider = null;
+ string config_source = null;
+ string localName;
+
+ while (reader.MoveToNextAttribute ()) {
+ localName = reader.LocalName;
+
+ if (localName == "configProtectionProvider")
+ protection_provider = reader.Value;
+ else if (localName == "configSource")
+ config_source = reader.Value;
+ }
+
/* XXX this stuff shouldn't be here */
{
- string protection_provider = null;
-
- while (reader.MoveToNextAttribute ()) {
- if (reader.LocalName ==
"configProtectionProvider")
- protection_provider =
reader.Value;
- }
-
if (protection_provider != null) {
ProtectedConfigurationProvider prov =
ProtectedConfiguration.GetProvider (protection_provider, true);
XmlDocument doc = new XmlDocument ();
@@ -128,8 +134,24 @@
}
}
+ XmlReader r = reader;
+ if (config_source != null) {
+ if (config_source.Length == 0 ||
Path.IsPathRooted (config_source))
+ throw new ConfigurationException ("The
configSource attribute must be a relative physical path.");
+
+ if (HasValues ())
+ throw new ConfigurationException ("A
section using 'configSource' may contain no other attributes or elements.");
+
+ SectionInformation.ConfigSource = config_source;
+ if (File.Exists (config_source)) {
+ RawXml = File.ReadAllText
(config_source);
+ r = new XmlTextReader (new StringReader
(RawXml));
+ } else
+ RawXml = null;
+ }
+
SectionInformation.SetRawXml (RawXml);
- DeserializeElement (reader, false);
+ DeserializeElement (r, false);
}
protected internal virtual string SerializeSection
(ConfigurationElement parentElement, string name, ConfigurationSaveMode
saveMode)
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches