2011-10-24 20 views
7

Estoy en el proceso de escribir un servicio usando C# y necesito almacenar una lista de cadenas dentro del archivo app.config. Tengo 161 de estos.C# 'configuración de la aplicación archivo "app.config" ... ¿cómo almacenar colecciones?

¿Cómo puedo almacenar esta información en el archivo app.config? Debe haber una forma, porque estos son valores fuertemente tipados y, por lo tanto, se supone que debo usar fácilmente cualquier tipo de .NET válido en el código para acceder a ellos.

Quiero evitar tener un valor que utiliza una lista separada por comas para problemas obvios de rendimiento.

+0

¿Cómo afectaría una lista separada por comas al rendimiento? Utilicé una cadena delimitada por comas en archivos de configuración antes y no noté ningún problema de rendimiento. – Tim

+0

@Tim: acepto que el rendimiento probablemente no sea el controlador para esto, pero para 161 elementos, una lista separada por comas no es la solución más elegante en su archivo app.config. Dado que app.config es XML y será deserializado de todos modos, es mucho mejor almacenar sus datos en XML dentro de él. – Fenton

Respuesta

11

Yo uso de Microsoft Visual Studio 2010.

  1. En el Explorador de soluciones , ampliar las Propiedades nodo de su proyecto.

  2. En el Explorador de soluciones , haga doble clic en el .settings archivo en el que desea añadir un nuevo ajuste. El nombre predeterminado para este archivo es Settings.settings.

  3. En Designer Configuración, establezca la Nombre, Tipo, Ámbito, y Valor para su ajuste. Cada fila representa una sola configuración.

  4. El tipo que necesita es System.Collections.Specialized.StringCollection. Esto se puede encontrar después de hacer clic en Buscar al final de DropDownList que aparece cuando hace clic para establecer Tipo.

  5. Haga clic en el botón que aparece hacia el final del Valor TextBox.

  6. Escriba sus cadenas, una a una, en el cuadro de diálogo que aparece.

This is how it goes.

10

Hay un buen artículo sobre el almacenamiento de listas (o cualquier objeto personalizado) en sus archivos app.config en Best Way Of Saving Lists in App.Config

En esencia, se crea un objeto que representa los datos.

public class MyConfig 
{ 
    public string[] myList; 
    public string someOtherValueIfYouWant; 
} 

Y escribir un gestor de configuración para que ...

public class ConfigSectionHandler : IConfigurationSectionHandler 
{ 
    public const string SECTION_NAME = "MyConfig"; 
    public object Create(object parent, object configContext, XmlNode section) 
    { 
     string szConfig = section.SelectSingleNode("//MyConfig").OuterXml; 
     MyConfig retConf = null; 

     if (szConfig != string.Empty || szConfig != null) 
     { 
      XmlSerializer xsw = new XmlSerializer(typeof(MyConfig)); 
      MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szConfig)); 
      ms.Position = 0; 
      retConf = (MyConfig)xsw.DeSerialize(ms); 
     } 
     return retConf; 
    } 

} 

Y esto le permite poner el siguiente código XML en el archivo app.config ...

aplicación Tell.config acerca de su sección de configuración fresco

<configSections> 
    <section name="MyConfig" type="ConfigSectionHandler,someAssembly" /> 
</configSection> 

Y luego añadir su sección de configuración ...

<MyConfig> 
    <myList>First one</myList> 
    <myList>Second one</myList> 
    <myList>Keep going</myList> 
    <myList>And so on</myList> 
    <someOtherValueIfYouWant>some non array config</someOtherValueIfYouWant> 
</MyConfig> 
+1

ADVERTENCIA: este tema utiliza la interfaz System.Configuration.IConfigurationSectionHandler, que ha quedado obsoleta en .NET Framework versión 2.0. Para ver un ejemplo que usa la clase System.Configuration.ConfigurationSection, consulte Cómo crear secciones de configuración personalizadas usando ConfigurationSection (http://msdn.microsoft.com/en-us/library/2tw134k3(v=vs.100).aspx) – woohoo

-3

https://stackoverflow.com/a/30178144/878539

StringCollection se NO recomienda en VS2015RC con el propósito de annoyance'ness cuando cargar la ventana de diálogo de configuración de propiedades para el proyecto y volver a guardar los datos. Si tiene una docena de entradas para serializeAs = "Xml" y cada vez que abra la ventana de propiedades aparecerá un diálogo para CADA entrada que le indicará que confirme la sobrescritura. Sí/No no hace absolutamente nada.

La falta de coincidencia de datos para cada archivo lo configurará como un problema conocido. Ver mi otra publicación relacionada.

Yo le votaría por el uso de VS2010 y lo sugeriría como tal, pero no tengo suficiente reputación y persiste también a través de VS2015RC.

Utilice una solución alternativa como el almacenamiento de configuración personalizada o busque la manera de dejar sus colecciones fuera del diseñador o app.config. Uno o el otro.

Solución viable solo para aquellos dispuestos a tolerar las ventanas de diálogo nag o rara vez editan la información de propiedad de las configuraciones.

¿Recomendaría nag screen nuciences para producción o lanzamiento a cualquier tipo de proyecto comercial? : P

Cuestiones relacionadas