read net manager iconfiguration configurationbuilder asp .net configuration

.net - net - Archivo de configuración como recurso incrustado



net core get appsettings (3)

¿Alguien tiene un ejemplo de uso de un archivo de configuración incrustado en VB.NET o C #? Entiendo cómo incrustar el archivo de configuración, pero ¿cuál es el mejor método para acceder a él luego? ¿Puedo tratarlo como un archivo de configuración, como puedo con los archivos de configuración externos?

Cualquier ayuda es muy apreciada.


Creo que no es la idea de poner el archivo de configuración para ser un recurso incrustado. los recursos incrustados se empaquetan en el dll y luego no se puede cambiar la configuración sin la recompilación (que es la idea de un archivo de configuración en primer lugar).


Normalmente tengo una clase que guarda las preferencias en un xml en el UserAppDataPath. Algo como:

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); } }


Una opción para usted es usar un objeto de Configuración para contener valores predeterminados para cualquier configuración de configuración. Entonces, en el constructor para el objeto de configuración, podría intentar anular los valores de configuración predeterminados con valores de algún lugar como app.config, una tabla de configuración de base de datos, etc.

Esto es útil para una serie de propósitos:

  1. Las herramientas de prueba unitaria (como nUnit) requieren una configuración especial para acceder a app.config.
  2. La existencia del archivo app.config no es necesaria ya que usará los valores predeterminados (que parece ser su objetivo).
  3. Puede ayudar a garantizar valores de configuración de tipo seguro.

Un simple ejemplo:

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; } } } }

Para acceder a los valores de configuración use: MyConfiguration.GetConfig (). Value1

Espero que esto ayude, Max