I have this Q1.config
file in my Console Application (.NET 4.5.2)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="globalKey" value="globalValue" />
</appSettings>
<configSections>
<section name="validations" type="System.Configuration.NameValueSectionHandler" />
</configSections>
<validations>
<add key="validationKey" value="validationValue"/>
</validations>
</configuration>
I'm reading it like this
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap { ExeConfigFilename = "Q1.config" };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
ConfigurationSection validationSettings = config.GetSection("validations");
This works fine:
string globalValue = config.AppSettings.Settings["globalKey"].Value;
But how do I get my "validationKey"? I tried these but they don't work:
validationSettings["validationKey"]
validationSettings.Settings["validationKey"]
(config.GetSection("validations") as NameValueCollection)["validationKey"]
Here you go
Your XML configuration
<configuration>
<configSections>
<section name="validations" type="System.Configuration.AppSettingsSection" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<add key="globalKey" value="globalValue" />
</appSettings>
<validations>
<add key="validationKey" value="validationValue"/>
</validations>
</configuration>
And you can get these values in C# using
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap { ExeConfigFilename = "Q1.config" };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
NameValueCollection validationSettings = (NameValueCollection)ConfigurationManager.GetSection("validations");
string globalValue = validationSettings[0];
I've used an index here validationSettings[0]
to access the value. You can use your key to get the value
Thanks
With the answer from @Karthik I ran into an issue... if I use ConfigurationManager.GetSection()
I only get null. To get the section I have to use the config object returned by OpenMappedExeConfiguration
. However, GetSection() in config isn't of type object
as in ConfigurationManager, but DefaultSection
from which I can't read the key value pairs, nor can I cast it to NameValueCollection
. Browsing on the web I found this article with a solution that worked for me.
Basically extract the XML from the section and parse it manually with an XmlDoc.
public static NameValueCollection GetSectionSettings(string sectionToRead, string configPath)
{
if (!File.Exists(configPath)) { throw new ArgumentException($"File not found: {configPath}", nameof(configPath)); }
var fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = configPath };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
string settingsXml = config.GetSection(sectionToRead).SectionInformation.GetRawXml();
XmlDocument settingsXmlDoc = new XmlDocument();
settingsXmlDoc.Load(new StringReader(settingsXml));
NameValueSectionHandler handler = new NameValueSectionHandler();
return handler.Create(null, null, settingsXmlDoc.DocumentElement) as NameValueCollection;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.