C# 配置部分赢得';t转换为NameValueCollection
我的控制台应用程序(.NET 4.5.2)中有这个C# 配置部分赢得';t转换为NameValueCollection,c#,configuration,config,C#,Configuration,Config,我的控制台应用程序(.NET 4.5.2)中有这个Q1.config文件 这很好: string globalValue = config.AppSettings.Settings["globalKey"].Value; 但我如何获得“验证密钥”?我试过这些,但不起作用: validationSettings["validationKey"] validationSettings.Settings["validationKey"] (config.GetSection("validations
Q1.config
文件
这很好:
string globalValue = config.AppSettings.Settings["globalKey"].Value;
但我如何获得“验证密钥”?我试过这些,但不起作用:
validationSettings["validationKey"]
validationSettings.Settings["validationKey"]
(config.GetSection("validations") as NameValueCollection)["validationKey"]
给你
您的XML配置
<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>
我在这里使用了一个索引validationSettings[0]
来访问该值。您可以使用密钥获取值
感谢@Karthik的回答,我遇到了一个问题。。。如果我使用
ConfigurationManager.GetSection()
我只得到null。要获取节,我必须使用OpenMappedExeConfiguration
返回的config对象。但是,config中的GetSection()不是ConfigurationManager中的类型object
,而是DefaultSection
,我无法从中读取键值对,也无法将其转换为NameValueCollection
。在网上浏览我找到了一个适合我的解决方案
基本上,从节中提取XML并使用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;
}
有没有可能这个代码已经过时了?当我使用
ConfigurationManager.GetSection
时,我只会得到null,要获得该节,我必须使用OpenMappedExeConfiguration
返回的config
对象。但是,config中的GetSection不是ConfigurationManager中的类型object
,而是DefaultSection
,我无法从中读取键值对,也无法将其转换为NameValueCollection
<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>
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap { ExeConfigFilename = "Q1.config" };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
NameValueCollection validationSettings = (NameValueCollection)ConfigurationManager.GetSection("validations");
string globalValue = validationSettings[0];
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;
}