Файл конфигурации как встроенный ресурс - PullRequest
7 голосов
/ 20 января 2009

У кого-нибудь есть пример использования встроенного файла конфигурации в VB.NET или C #? Я понимаю, как встроить файл конфигурации, но каков наилучший способ получить к нему доступ позже? Могу ли я рассматривать его как файл конфигурации, как я могу с внешними файлами конфигурации?

Любая помощь очень ценится.

Ответы [ 3 ]

7 голосов
/ 20 января 2009

Я полагаю, что не стоит помещать файл конфигурации в качестве встроенного ресурса. встроенные ресурсы упаковываются в dll, и вы не сможете впоследствии изменить свою конфигурацию без перекомпиляции (в первую очередь это идея файла конфигурации).

4 голосов
/ 20 января 2009

Один из вариантов для вас - использовать объект конфигурации для хранения значений по умолчанию для любых параметров конфигурации. Затем в конструкторе объекта конфигурации можно попытаться переопределить значения конфигурации по умолчанию значениями из какого-либо места, такими как app.config, таблица конфигурации базы данных и т. Д.

Это полезно для ряда целей:

  1. Инструментам модульного тестирования (таким как nUnit) требуется специальная настройка для доступа к app.config.
  2. Наличие файла app.config необязательно, так как в нем будут использоваться значения по умолчанию (что, по-видимому, и является вашей целью).
  3. Может помочь обеспечить безопасные для типов значения конфигурации.

Простой пример:

public class MyConfiguration
{


    private string _defaultValue1 = "Value1";
    private int _defaultValue2 = 22;



    public string Value1
    {
        get
        {
            return _defaultValue1;
        }
    }

    public int Value2
    {
        get
        {
            return _defaultValue2;
        }
    }

    #region cnstr

    public MyConfiguration()
    {
        LoadValuesFromConfigurationXml();
    }

    #endregion


    public static MyConfiguration GetConfig()
    {
        // Optionally Cache the config values in here... caching code removed 
        // for simplicity
        return new MyConfiguration();
    }    

    internal void LoadValuesFromConfigurationXml()
    {
        int tempInt;

        string value = ConfigurationManager.AppSettings["Value1"];

        if (!String.IsNullOrEmpty(value))
        {
            _defaultValue1 = value;
        }

        value = ConfigurationManager.AppSettings["Value2"];

        if (!String.IsNullOrEmpty(value))
        {
            if (int.TryParse(value, out tempInt))
            {
                _defaultValue2 = tempInt;
            }
        }


    }

}

Для доступа к значениям конфигурации используйте: MyConfiguration.GetConfig (). Value1

Надеюсь, это поможет, Max

3 голосов
/ 21 января 2009

У меня обычно есть класс, который сохраняет настройки в xml в UserAppDataPath. Что-то вроде:

public class Preferences
    {
        public static String prefFile = "/preferences.xml";
        private static XmlDocument doc;

        public static void set(String prefName, String value)
        {
            XmlElement nnode = (XmlElement)root.SelectSingleNode("//" + prefName);
            if (nnode == null)
            {
                nnode = doc.CreateElement(prefName);
                root.AppendChild(nnode);
            }
            nnode.InnerText = value;
        }
        public static String get(String prefName)
        {
            XmlElement nnode = (XmlElement)root.SelectSingleNode("//" + prefName);
            if (nnode != null) return nnode.InnerText;
            return "";
        }

        private static XmlElement root
        {
            get
            {
                if (doc == null)
                {
                    doc = new XmlDocument();
                    try
                    {
                        doc.Load(Application.UserAppDataPath + prefFile);
                    }
                    catch (Exception)
                    {
                        doc.LoadXml("<root></root>");
                        NodeChangedHandler(null, null); // costringo a salvare.
                    }
                    doc.NodeChanged += new XmlNodeChangedEventHandler(NodeChangedHandler);
                    doc.NodeInserted += new XmlNodeChangedEventHandler(NodeChangedHandler);
                    doc.NodeRemoved += new XmlNodeChangedEventHandler(NodeChangedHandler);
                }
                return (XmlElement)doc.FirstChild;
            }
        }
        private static void NodeChangedHandler(Object src, XmlNodeChangedEventArgs args)
        {
            if (doc != null)
                doc.Save(prefFile);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...