public void Test() { if (File.Exists(Section1.XsdFile)) { File.Delete(Section1.XsdFile); } Section1 a = (XmlConfiguration <Section1>)ConfigurationManager.GetSection("Section1"); Assert.AreEqual(123, a.id); Assert.AreEqual(432.1, a.value); Assert.AreEqual("hello", a.name); a = null; Section2 b = ((XmlConfiguration <Section2>)ConfigurationManager.GetSection("Section2")).Settings; Assert.AreEqual(123, b.id); Assert.AreEqual("432.1", b.value); Assert.AreEqual("hello", b.name); b = null; b = XmlConfiguration <Section2> .ReadConfig("Section2"); Assert.AreEqual(123, b.id); Assert.AreEqual("432.1", b.value); Assert.AreEqual("hello", b.name); b = null; using (XmlReader rdr = new XmlTextReader(new StringReader("<Section2 id='123' value='432.1'><name>hello</name></Section2>"))) { b = XmlConfiguration <Section2> .ReadXml(rdr); Assert.AreEqual(123, b.id); Assert.AreEqual("432.1", b.value); Assert.AreEqual("hello", b.name); b = null; } XmlConfiguration <Section2> .XmlSchema = System.Xml.Schema.XmlSchema.Read( this.GetType().Assembly.GetManifestResourceStream(this.GetType().Namespace + ".TestXmlSection2.xsd"), null ); //now we should get an exception when reading section 2... try { ConfigurationManager.RefreshSection("Section2"); b = (XmlConfiguration <Section2>)ConfigurationManager.GetSection("Section2"); } catch (System.Configuration.ConfigurationErrorsException ce) { Assert.IsTrue(ce.Message.Contains("The 'value' attribute is invalid")); Assert.IsNotNull(ce.InnerException); Assert.AreEqual(typeof(XmlException), ce.InnerException.GetType()); } Assert.IsNull(b); Section3 c = (XmlConfiguration <Section3>)ConfigurationManager.GetSection("Section3"); Assert.AreEqual(123, c.id); Assert.AreEqual(new DateTime(2009, 12, 25, 0, 0, 0), c.value); Assert.AreEqual("hello", c.name); b = null; // the following invalid xsd will cause an exception File.WriteAllText(Section1.XsdFile, "<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'><xs:element /></xs:schema>"); ConfigurationManager.RefreshSection("Section1"); string origDir = Environment.CurrentDirectory; Environment.CurrentDirectory = Path.GetTempPath(); try { a = (XmlConfiguration <Section1>)ConfigurationManager.GetSection("Section1"); } catch (ConfigurationErrorsException) { } finally { Environment.CurrentDirectory = origDir; File.Delete(Section1.XsdFile); } Assert.IsNull(a); }