如何从C#中的自定义.config文件中读取特定键?

时间:2018-05-15 18:21:21

标签: c# config

我有一个自定义let jsonString = String(data: jsonData, encoding: .utf8)! 文件位于下方,希望读取.config的值并进行更新。我可以去ServerUrl,但不知道如何进入AutoUpdate

.CONFIG:

Settings -> ServerUrl

代码:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="AutoUpdate">
      <section name="Settings" type="System.Configuration.NameValueSectionHandler" />
    </sectionGroup>
  </configSections>
  <AutoUpdate>
    <Settings>
      <add key="Enabled" value="True" />
      <add key="ForceActivation" value="True" />
      <add key="Environment" value="Prod" />
      <add key="ServerUrl" value="https://Something.xml" />
      <add key="HourToCheckAutoUpdate" value="1" />
    </Settings>
  </AutoUpdate>
</configuration>

2 个答案:

答案 0 :(得分:2)

更新 .Config 文件以使用&#39; AppSettingsSection&#39;:

<section name="Settings" type="System.Configuration.AppSettingsSection" />

使用以下代码获取属性:

var configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"MyPath\My.config";
var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

var settingsSection = (AppSettingsSection) config.GetSection("AutoUpdate/Settings");
var enabled = settingsSection.Settings["Enabled"].Value;
var serverUrl = settingsSection.Settings["ServerUrl"].Value;

答案 1 :(得分:0)

你将受限于你能做什么。您无法简单地读取/转换外部配置文件中标有NameValueSectionHandler的部分。 ConfigurationManager.OpenMappedExeConfiguration(...).GetSection(...)方法继承了一组不同的基类,并且不知道如何处理NameValueSectionHandler

解决此问题的最佳方法是将您的部分标记为使用AppSettingsSection而不是@ {1}},详见@ Stringfellow的答案,但无论出于何种原因(可能是好的)你无法做到这一点。

因此,您将不得不在某个时候使用原始xml。以下是如何实现此目的的示例。

NameValueSectionHandler

这样做的一个警告是,您冒着错误地破坏配置文件的高风险。同样,@ Stringfellow的答案将是处理此问题的首选方式。