2016-04-15 4 views
2

Я пытаюсь сделать мою библиотеку классов журналов, чтобы получить некоторые из ее настроек конфигурации из App.Config приложения.Как сохранить изменения конфигурации обратно в App.Config

  1. Ничего не спасено. Каждый раз, когда я запускаю приложение, он устанавливает значения по умолчанию. Но я все еще могу ссылаться на них во время пробега.
  2. Если это сохранение настроек в файл, я не могу найти файл. Его не app.config или user.config в каталоге bin/Debug /.
  3. Я запускаю 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> 
+0

«Я пытаюсь сделать свою библиотеку классов журнала, чтобы получить некоторые из ее настроек конфигурации из приложения App.Config приложения». По ** design ** библиотека классов будет считывать значения из конфигурационного файла приложения-потребителя. Вам не нужно ничего делать, просто вытащите значения, как если бы это было приложение. – Tim

+0

т. Е. 'ConfigurationManager.AppSettings [" SomeKey "]' будет работать из вашей библиотеки классов так же, как и из приложения, если значения есть. Если их там нет, я думаю, что лучший дизайн - это выбросить ошибку и позволить приложению решить эту проблему, иначе вы рискуете тесно связать себя с библиотекой классов с приложениями, которые ее используют, меня как немного сомнительного дизайна, учитывая, что библиотеки классов предназначены для повторного использования в нескольких приложениях. – Tim

+0

@Tim Я не могу получить доступ к ConfigurationManager.AppSettings ["MaxLogFileSize"] из библиотеки классов или приложения. Я могу использовать Properties.Settings.Default.MaxLogFileSize в приложении, но не из библиотеки классов. См. Мое обновление. – Randy

ответ

0

Решение было вручную добавить к App.Config:

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

Тогда как Тим указал: ConfigurationManager.AppSettings["SomeKey"] будет работать из вашей библиотеки классов.