C# 如何将配置更改保存回App.config
我试图使我的logger类库从实际应用程序的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
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,但不能从类库中使用。查看我的更新。