¡Muchas Gracias Fernando!

 

Carlos Marcelo Santos.

 

From: [email protected] [mailto:[email protected]] On Behalf Of Fernando
Tubio
Sent: Jueves, 09 de Abril de 2009 12:23 p.m.
To: [email protected]
Subject: [puntonet] app.config

 

Carlos,

 

El problema es el uso del atributo file en lugar de configSource para
indicar el nombre del archivo donde se encuentra la configuración
alternativa. Cuando se usa este atributo, los valores de configuración
devueltos son el resultado de la fusión de la sección appSettings del
archivo principal y el archivo secundario. Si existe el valor solicitado en
el archivo especificado por el atributo file, se devuelve ese valor, en caso
contrario, se devuelve el valor del archivo principal. Cuando se modifica
alguno de los valores de la sección y luego se salva, estimo que no debe ser
fácil determinar la intención del desarrollador y en cuál de los dos
archivos se pretende guardar cada una de las configuraciones, así que debe
ser por eso que guarda todos los valores en el archivo principal.

 

Se pueden modificar los valores y salvarlos sin modificar el archivo
principal si se utiliza el atributo configSource. Pero en ese caso *todos*
los valores tienen que estar definidos en el archivo secundario.

 

Si utilizar configSource no es viable, entonces te sugiero crear una sección
alternativa para los valores "localizados".  Por ejemplo,

 

--- App.config ---

<configuration>

  <configSections>

    <section name="localizedAppSettings" 

             type="System.Configuration.AppSettingsSection"/>

  </configSections>

  <!-- VALORES NO LOCALIZADOS -->

  <appSettings >

    <add key="item0" value="CERO"/>

    <add key="item2" value="DOS"/>

  </appSettings>

 

  <!-- VALORES LOCALIZADOS EN ARCHIVO SECUNDARIO -->

  <localizedAppSettings configSource="App.EN.config" />

</configuration>

 

--- App.EN.config ---

<localizedAppSettings>

  <add key="item1" value="ONE"/>

  <add key="item2" value="TWO"/>

</localizedAppSettings>

 

Para reproducir el comportamiento de fusión entre ambos archivos, se puede
crear un método helper que recupere el valor de la sección
localizedAppSettings y si allí no existe, entonces devolver el valor que
encuentra en appSettings. Por ejemplo, usando un extension method sería:

 

public static class AppSettingsHelper

{

  public static KeyValueConfigurationElement 

       GetLocalizedSetting(this Configuration config, string key)

  {

    AppSettingsSection section = 

      (AppSettingsSection) config.GetSection("localizedAppSettings");

 

    KeyValueConfigurationElement element = section.Settings[key];

    if (element != null)

      return element;

 

     return config.AppSettings.Settings[key];

  }

}

 

Y se podría usar de esta manera

 

static void Main(string[] args)

{

  Configuration config =

    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

 

  // devuelve CERO - [X] app.config, [ ] app.EN.config

  Console.WriteLine(config.GetLocalizedSetting("item0").Value);

 

  // devuelve ONE - [ ] app.config, [X] app.EN.config

  Console.WriteLine(config.GetLocalizedSetting("item1").Value);

 

  // devuelve TWO - [X] app.config, [X] app.EN.config

  Console.WriteLine(config.GetLocalizedSetting("item2").Value);

 

  // si se salva, los cambios afectan solo appSettings

  config.AppSettings.Settings["item2"].Value = "MODIFICADO";

  config.Save(ConfigurationSaveMode.Modified);

}

 

Saludos,

 

Fernando Tubio

----- Original Message ----- 

From: Carlos Marcelo Santos <mailto:[email protected]>  

To: [email protected] 

Sent: Monday, April 06, 2009 12:09 PM

Subject: [puntonet] app.config

 

Gracias por contestar José.

Una aclaración, los valores de Terms.BR.config nunca los modifico desde la
aplicación, sólo los del app.config. Así y todo me vuelca el
Teerms.BR.config dentro del app.config

 

Saludos.

 

Carlos Marcelo Santos.

 

From: [email protected] [mailto:[email protected]] On Behalf Of José A.
Fernández
Sent: Miércoles, 01 de Abril de 2009 08:29 a.m.
To: [email protected]
Subject: [puntonet] app.config

 

Hola Carlos 

 

Utilizo esta tecnica de separar algunas secciones del web.config en archivos
separados pero no los modifico desde la app, asi que no conocia de este
comportamiento (que lo probare cuando tenga un tiempo, ya que debe ser algun
parametro para la actualizacion del contenido en archivos separados)

 

Lo que se me ocurre ahora es que debes abrir el archivo Terms.BR.config
directamente y obtener la seccion appSettings y manipularla. No creo que la
solucion sea como dice Daniel, porque si es un archivo separado del
web.config en toda la aplicacion tendremos que hacer nuestra propia tecnica
para leer los datos/obtener y en cambio si es <appSettings file=”
Terms.BR.config”> de esta forma el ConfigurationManager lo tendremos siempre
disponible sin necesidad de implementar nada (por esto me suena raro que
para actualizar "copie" y debamos cambiar el modo de obtenerlo)

Pero bueno la solucion "express" podria venir de la mano de algo asi:

 

Dim webConfig As Configuration =
WebConfigurationManager.OpenWebConfiguration("~/Terms.BR.config")

Dim seccion As AppSettingsSection =
CType(webConfig.GetSection("system.web/pages"), AppSettingsSection )

...y alli manipulas el contenido y lo guardas.

...te puede ayudar este articulo:

- Acceder a propiedades/atributos de secciones del web.config mediante
codebehind

http://geeks.ms/blogs/fernandezja/archive/2008/07/29/acceder-a-propiedades-a
tributos-de-secciones-del-web-config-mediante-codebehind.aspx

 

 

Espero que te sirva de ayuda o guia
_______________________
Jose A. Fernandez blog: http://geeks.ms/blogs/fernandezja 

 

 

2009/3/31 Carlos Marcelo Santos <[email protected]>

Muchas Gracias Diego y Daniel.

 

Carlos Marcelo Santos.

 

From: [email protected] [mailto:[email protected]] On Behalf Of Daniel
Calvin
Sent: Martes, 31 de Marzo de 2009 11:45 a.m.


To: [email protected]
Subject: [puntonet] app.config

 

Net ya trae clases para eso y podes hace implementaciones propias.
Podes guardar tu propio archivo de conf. 

Carlos fijate como se maneja en coop el lazyload.config, usa esas clases y
algunas propias. Pero todo lo hace con las apis de conf de net.

Daniel

El 31 de marzo de 2009 11:31, Diego Jancic <[email protected]> escribió:

Hola Carlos,
Nunca lo hice, pero imagino que es asi por diseño o por error...
No pensaste directamente hacer un workarround guardando las
configuracion en un XML tuyo? Es muy facil hacer una clase con las
propiedades que queres y serializarlo a XML...

Saludos!

2009/3/31 Carlos Marcelo Santos <[email protected]>:

> Hola Gente:
>
> Disculpen que insista con el tema del mail que copio debajo, ¿alguien sabe
> que puede estar sucediendo?
>
>
>
> Muchas Gracias.
>
>
>
> Carlos Marcelo Santos.
>
>
>
> From: [email protected] [mailto:[email protected]] On Behalf Of Carlos
> Marcelo Santos
> Sent: Jueves, 26 de Marzo de 2009 12:29 p.m.
> To: [email protected]
> Subject: [puntonet] app.config
>
>
>
> Hola Lista:
>
> Tengo una aplicación desktop en la que uso el app.config para almacenar
> valores de configuración entre los tags <appSettings></appSettings>
>
> Como necesito implementar multilanguaje extiendo el archivo app.config
> usando el tag <appSettings> de la siguiente forma:
>
> <appSettings file=” Terms.BR.config”>
>
> Y cambiando el atributo de file, con un archivo XML bien definido cambio
de
> lenguaje sin problemas.
>
> Hasta acá todo anda bien.
>
> Mi problema se da cuando desde la ejecución del programa cambio algún
> parámetro, al persistirlo en el app.config con:
>
>
>
> Dim mAppConfig As System.Configuration. Configuration =
> ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
>
> mAppConfig.AppSettings.Item(“ItemConfig”).Value = “NuevoValor”
>
> mAppConfig.Save(ConfigurationSaveMode.Modified)
>
>
>
> Al ejecutar mAppConfig.Save me copia todo el contenido de
“Terms.BR.config”
> en el app.config
>
> ¿Conocen alguna forma de impedir que esta copia se produzca?
>
>
>
> Muchas Gracias.
>
>
>
> Carlos Marcelo Santos.
>
>
>
> Se certificó que el correo entrante no contiene virus.
> Comprobada por AVG - www.avg.es
> Versión: 8.5.278 / Base de datos de virus: 270.11.28/2022 - Fecha de la
> versión: 03/25/09 18:54:00




-- 
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - www.avg.es

Versión: 8.5.285 / Base de datos de virus: 270.11.32/2030 - Fecha de la
versión: 03/31/09 06:02:00





Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 8.5.285 / Base de datos de virus: 270.11.32/2030 - Fecha de la
versión: 04/01/09 06:06:00

Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 8.5.287 / Base de datos de virus: 270.11.32/2030 - Fecha de la
versión: 04/09/09 10:27:00

Responder a