我的控制台应用程序(.NET 4.5.2)中有此Q1.config文件
<?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>我是这样读的
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap { ExeConfigFilename = "Q1.config" };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
ConfigurationSection validationSettings = config.GetSection("validations");这可以很好地工作:
string globalValue = config.AppSettings.Settings["globalKey"].Value;但是我如何得到我的"validationKey“呢?我试过这些,但它们不起作用:
validationSettings["validationKey"]
validationSettings.Settings["validationKey"]
(config.GetSection("validations") as NameValueCollection)["validationKey"]发布于 2017-03-07 15:06:00
这就是你要的
您的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>您可以在C#中使用以下命令获取这些值
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap { ExeConfigFilename = "Q1.config" };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
NameValueCollection validationSettings = (NameValueCollection)ConfigurationManager.GetSection("validations");
string globalValue = validationSettings[0];我在这里使用了一个索引validationSettings[0]来访问值。您可以使用您的密钥来获取值
谢谢
发布于 2020-12-30 12:45:44
有了@Karthik的回答,我遇到了一个问题...如果我使用ConfigurationManager.GetSection(),我只能得到null。为了获得这个部分,我必须使用OpenMappedExeConfiguration返回的配置对象。但是,config中的GetSection()不是像ConfigurationManager中那样的object类型,而是DefaultSection类型,我不能从它读取键值对,也不能将其转换为NameValueCollection。浏览网页时,我发现this article提供了一个适合我的解决方案。
基本上,从该部分提取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;
}https://stackoverflow.com/questions/42641110
复制相似问题