2
Я пытаюсь сделать мою библиотеку классов журналов, чтобы получить некоторые из ее настроек конфигурации из App.Config приложения.Как сохранить изменения конфигурации обратно в App.Config
- Ничего не спасено. Каждый раз, когда я запускаю приложение, он устанавливает значения по умолчанию. Но я все еще могу ссылаться на них во время пробега.
- Если это сохранение настроек в файл, я не могу найти файл. Его не app.config или user.config в каталоге bin/Debug /.
- Я запускаю CheckLogSettings каждый раз, когда запускается программа.
Вот мой Helper класс из библиотеки 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;
}
UPDATE
snipit из моего 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 приложения». По ** design ** библиотека классов будет считывать значения из конфигурационного файла приложения-потребителя. Вам не нужно ничего делать, просто вытащите значения, как если бы это было приложение. – Tim
т. Е. 'ConfigurationManager.AppSettings [" SomeKey "]' будет работать из вашей библиотеки классов так же, как и из приложения, если значения есть. Если их там нет, я думаю, что лучший дизайн - это выбросить ошибку и позволить приложению решить эту проблему, иначе вы рискуете тесно связать себя с библиотекой классов с приложениями, которые ее используют, меня как немного сомнительного дизайна, учитывая, что библиотеки классов предназначены для повторного использования в нескольких приложениях. – Tim
@Tim Я не могу получить доступ к ConfigurationManager.AppSettings ["MaxLogFileSize"] из библиотеки классов или приложения. Я могу использовать Properties.Settings.Default.MaxLogFileSize в приложении, но не из библиотеки классов. См. Мое обновление. – Randy