C# 如何将配置更改保存回App.config

C# 如何将配置更改保存回App.config,c#,app-config,class-library,C#,App Config,Class Library,我试图使我的logger类库从实际应用程序的App.config获取一些配置设置 实际上什么都没有救。每次我运行应用程序时,它都会设置 默认值。但我仍然可以在跑步时参考它们 如果正在将设置保存到文件中,我找不到该文件。 它不是bin/Debug/目录中的app.config或user.config 每次程序启动时,我都运行CheckLogSettings 以下是我在Logger库中的助手类: public class SettingsHelper { private static rea

我试图使我的logger类库从实际应用程序的App.config获取一些配置设置

  • 实际上什么都没有救。每次我运行应用程序时,它都会设置 默认值。但我仍然可以在跑步时参考它们
  • 如果正在将设置保存到文件中,我找不到该文件。 它不是bin/Debug/目录中的app.config或user.config
  • 每次程序启动时,我都运行CheckLogSettings
  • 以下是我在Logger库中的助手类:

    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中的snipit:

    <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>
    
    <appSettings>
        <add key="LoggingEnabled" value="True"/>
        <add key="MaxLogFileSize" value="2097152"/>
        <add key="LogFileName" value="AppLog.txt"/>
    </appSettings>
    
    
    真的
    2097152
    AppLog.txt
    
    解决方案是手动添加到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>
    
    <appSettings>
        <add key="LoggingEnabled" value="True"/>
        <add key="MaxLogFileSize" value="2097152"/>
        <add key="LogFileName" value="AppLog.txt"/>
    </appSettings>
    
    
    

    然后正如Tim指出的:
    ConfigurationManager.AppSettings[“SomeKey”]
    将在类库中工作

    “我试图使我的记录器类库从实际应用程序的App.config中获取一些配置设置。”根据设计,类库将从消费应用程序的配置文件中读取值。您不需要做任何特殊的操作,只需像应用程序一样提取值即可。例如,
    ConfigurationManager.AppSettings[“SomeKey”]
    将从类库中工作,就像从应用程序中一样,只要值存在。如果它们不存在,我认为更好的设计是抛出一个错误,让应用程序解决这个问题,否则您将面临将类库与使用它的应用程序紧密耦合的风险,这让我觉得设计有点可疑,鉴于类库旨在跨多个应用程序重用。@Tim我无法从类库或应用程序访问ConfigurationManager.AppSettings[“MaxLogFileSize”]。我可以在应用程序中使用Properties.Settings.Default.MaxLogFileSize,但不能从类库中使用。查看我的更新。