read net manager iconfiguration configurationbuilder asp .net configuration

manager - ¿Qué método de configuración prefieres en.net? ¿Por qué?



net core get appsettings (13)

  • Puedes usar App.config; pero solo admite pares clave / valor.
  • Puede usar la configuración .Net, las secciones de configuración; pero puede ser realmente complejo.
  • Puede usar Xml Serialization / Deserialization usted mismo; tus clases, a tu manera.
  • Puedes usar algún otro método; ¿qué pueden ser? ...

¿Cuál de estos u otros métodos (si los hay) prefiere? ¿Por qué?


Antes era administrador de red / sistema y ahora desarrollo utilidades internas para aplicaciones de bases de datos. Lo que he encontrado es esto:

Los archivos de configuración simples no anidados son los mejores para las aplicaciones que no cambiarán cuando accedan a sus recursos mucho.

Cualquier cosa más compleja debe ir a una base de datos con una IU de administración. Esto solo aplica a usuarios comerciales regulares. Si le preocupa que la base de datos se corrompa, utilice el enfoque de archivo de configuración compleja. Los archivos tienden a corromper menos que las bases de datos.

Ahora, si sus usuarios son otros desarrolladores, tendrá mucha más flexibilidad sobre qué usar para almacenar sus configuraciones.


Creo que NameValueCollectionHandler es el más fácil y el mejor, y generalmente me gustaría vincularlo a un archivo de configuración externo a través del atributo configSource.

Intento poner la configuración ABSOLUTA MÍNIMA en archivos de configuración, con la mayor parte configurada en código con una Aplicación que conoce su entorno de despliegue (como el nombre de la máquina o la Dirección IP, si se conoce). Por supuesto, esto requirió mucha más planificación previa y conocimiento de sus entornos, pero mucho menos dolor de cabeza durante la implementación.


Cuando los pares de valores clave no son suficientes, utilizo Secciones de configuración ya que no son complejos de usar (a menos que necesite una sección compleja):

Define tu sección personalizada:

public class CustomSection : ConfigurationSection { [ConfigurationProperty("LastName", IsRequired = true, DefaultValue = "TEST")] public String LastName { get { return (String)base["LastName"]; } set { base["LastName"] = value; } } [ConfigurationProperty("FirstName", IsRequired = true, DefaultValue = "TEST")] public String FirstName { get { return (String)base["FirstName"]; } set { base["FirstName"] = value; } } public CustomSection() { } }

Cree su sección mediante programación (si aún no existe):

// Create a custom section. static void CreateSection() { try { CustomSection customSection; // Get the current configuration file. System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(@"ConfigurationTest.exe"); // Create the section entry // in the <configSections> and the // related target section in <configuration>. if (config.Sections["CustomSection"] == null) { customSection = new CustomSection(); config.Sections.Add("CustomSection", customSection); customSection.SectionInformation.ForceSave = true; config.Save(ConfigurationSaveMode.Full); } } catch (ConfigurationErrorsException err) { //manage exception - give feedback or whatever } }

Se crearán para usted las siguientes definiciones de CustomSection y CustomSection real:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="CustomSection" type="ConfigurationTest.CustomSection, ConfigurationTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" /> </configSections> <CustomSection LastName="TEST" FirstName="TEST" /> </configuration>

Ahora recupera tus propiedades de sección:

CustomSection section = (CustomSection)ConfigurationManager.GetSection("CustomSection"); string lastName = section.LastName; string firstName = section.FirstName;


Guardo la mayor parte de mi configuración en el contenedor IoC, por ejemplo, Spring.Net.


Pon tu configuración en una base de datos. Si ejecuta su aplicación en más de 1 máquina (por ejemplo, una aplicación cliente-servidor), entonces todos los sistemas de configuración por máquina son un PITA. Un área de configuración única es la mejor manera de colocar su configuración. Escribe una guía para manejarlo y estarás muy feliz.

Implementar archivos de app.config en 200 cuadros de clientes ... no es divertido, especialmente cuando uno se pierde (y lo hacen, créanme).


Si puedo salirse con la suya, solo usaré App.Config, sin embargo, si necesito algo más complejo, usaré secciones de configuración personalizadas. Sí, es difícil entenderlo al principio, pero una fuente de configuración unificada, y una configuración familiar para todos los entornos, vale la pena invertir tiempo, en mi opinión.


Si tiene .NET 3.0 disponible, creo que el XamlReader / XamlWriter es muy útil para almacenar configuraciones. Pueden escribir / leer cualquier objeto .NET a XAML si:

  • El objeto tiene un constructor sin parámetros
  • Las propiedades de lectura / escritura tienen getters y setters públicos

Es especialmente agradable que no tenga que decorar sus objetos de configuración con ningún atributo.


Utilizo un archivo de configuración xml personalizado, donde se usa un archivo de configuración diferente para cada entorno (dev / qa / prod). Los archivos de configuración son plantillas que se crean instancias dinámicas con cosas como configuraciones de host / puerto para servicios: esto hace que los entornos múltiples y la conmutación por error sean muy fáciles, ya que el código de creación de instancias de la plantilla puede manejarlo.

Por supuesto, si tiene muy pocas configuraciones y no está interesado en múltiples entornos, entonces app.config es más estándar y es probablemente la mejor manera de hacerlo.


dataset.WriteXML () / dataset.ReadXML () funciona bastante bien para mí cuando el app.config ya no lo corta.


Creo que las configuraciones de clave / valor funcionan bastante bien para archivos de configuraciones simples. Se convierte en un problema cuando el archivo comienza a crecer y es difícil de mantener. Comenzamos a dividir el archivo de configuración en configuraciones de aplicaciones "comunes" y "específicas". El acceso a los archivos es transparente para la aplicación, los valores "comunes" son los mismos en la mayoría de los casos, pero los "específicos" difieren para cada aplicación desplegada.


He tenido la suerte de rodar mi propia clase especial que devuelve datos de configuración de un archivo ".settings" asociado con el conjunto de llamadas. El archivo es XML y la clase de configuración lo expone públicamente como un XDocument. Además, el indexador para esta clase de configuración devuelve valores de elementos desde / settings / setting nodes.

Funciona muy bien para aplicaciones simples donde solo necesita un par clave / valor para acceder a la configuración, y funciona muy bien para configuraciones complicadas donde necesita definir su propia estructura y usar System.Xml.Linq para consultar el documento XML.

Otro beneficio de rodar el suyo es que puede usar FileSystemWatcher y el tipo de acción de devolución de llamada para activar automáticamente un método cuando el archivo cambia en el tiempo de ejecución.


Sobre todo, prefiero usar un archivo xml personalizado y un método de serialización Xml para leer y escribir estos archivos de configuración ... No está restringido a pares clave / valor y no es complicado de implementar ...


Yo uso un archivo de configuración xml personalizado. Cada configuración tiene una clave, valor y tipo.

Tiene una sección principal que contiene todas las configuraciones y secciones adicionales que contienen anulaciones de configuración para entornos particulares (desarrollo, puesta en escena, en vivo). Esto no es necesario para reemplazar las secciones del archivo cuando se implementa. Tengo un pequeño contenedor al que puedes llamar para obtener una configuración particular o un diccionario que los contiene a todos.

Recientemente, creé una plantilla T4 que leerá el archivo de configuración y creará una clase de configuración fuertemente tipada estática. Eso ha sido un gran ahorro de tiempo.