如何将配置更改保存回 App.Config
How to save config changes back to App.Config
我正在尝试让我的记录器 class 库从实际应用程序的 App.Config.
中获取一些配置设置
- 实际上什么都没有保存。每次我 运行 它设置的应用程序
默认值。但我仍然可以在 运行.
期间参考它们
- 如果它正在将设置保存到文件中,我找不到该文件。
它不是 bin/Debug/ 目录中的 app.config 或 user.config。
- 每次程序启动我运行检查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 库中工作。
我正在尝试让我的记录器 class 库从实际应用程序的 App.Config.
中获取一些配置设置- 实际上什么都没有保存。每次我 运行 它设置的应用程序 默认值。但我仍然可以在 运行. 期间参考它们
- 如果它正在将设置保存到文件中,我找不到该文件。 它不是 bin/Debug/ 目录中的 app.config 或 user.config。
- 每次程序启动我运行检查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 库中工作。