如何将配置更改保存回 App.Config

How to save config changes back to App.Config

我正在尝试让我的记录器 class 库从实际应用程序的 App.Config.

中获取一些配置设置
  1. 实际上什么都没有保存。每次我 运行 它设置的应用程序 默认值。但我仍然可以在 运行.
  2. 期间参考它们
  3. 如果它正在将设置保存到文件中,我找不到该文件。 它不是 bin/Debug/ 目录中的 app.config 或 user.config。
  4. 每次程序启动我运行检查LogSettings。

这是来自 Logger 库的我的助手 Class:

public class SettingsHelper
{
    private static readonly Configuration Config =
        ConfigurationManager.OpenExeConfiguration
            (ConfigurationUserLevel.None);

    public static void CheckLogSettings()
    {
        string key;

        key = "LoggingEnabled";
        if (Config?.AppSettings?.Settings?[key]?.Value == null)
        {
            Debug.WriteLine("Set Default " + key);
            Config.AppSettings.Settings.Add(key, true.ToString());
            Config.Save(ConfigurationSaveMode.Modified, false);
        }

        key = "MaxLogFileSize";
        if (Config.AppSettings.Settings[key]?.Value == null)
        {
            Debug.WriteLine("Set Default " + key);
            Config.AppSettings.Settings.Add(key, (2*1024*1024).ToString());
            Config.Save(ConfigurationSaveMode.Modified, false);
        }

        key = "LogFileName";
        if (Config.AppSettings.Settings[key]?.Value == null)
        {
            Debug.WriteLine("Set Default " + key);
            Config.AppSettings.Settings.Add(key, "AppLog.txt");
            Config.Save(ConfigurationSaveMode.Modified, false);
        }
    }

    public static bool GetLoggingEnabled()
    {
        return bool.Parse(Config.AppSettings.Settings["LoggingEnabled"].Value);
    }

    public static long GetMaxLogFileSize()
    {
        return long.Parse(Config.AppSettings.Settings["MaxLogFileSize"].Value);
    }

    public static string GetLogFileName()
    {
        return Config.AppSettings.Settings["LogFileName"].Value;
    }

更新

来自我的 App.Config 的截图:

<applicationSettings>
    <WindowsFormsApplication1.Properties.Settings>
        <setting name="LoggingEnabled" serializeAs="String">
            <value>True</value>
        </setting>
        <setting name="MaxLogFileSize" serializeAs="String">
           <value>2097152</value>
        </setting>
        <setting name="LogFileName" serializeAs="String">
           <value>AppLog.txt</value>
        </setting>
    </WindowsFormsApplication1.Properties.Settings>
</applicationSettings>

解决方案是手动添加到 App.Config:

<appSettings>
    <add key="LoggingEnabled" value="True"/>
    <add key="MaxLogFileSize" value="2097152"/>
    <add key="LogFileName" value="AppLog.txt"/>
</appSettings>

然后正如 Tim 指出的那样:ConfigurationManager.AppSettings["SomeKey"] 将在您的 class 库中工作。