none
Appconfig cambiar en tiempo de ejecucion RRS feed

  • Pregunta

  • Hola grupo

    Queria saber si me pueden ayudar con lo siguiente:

    Tengo una aplicacion compilada en modo release.

    Quiero cambiar un valor determinado del appconfig en tiempo de ejecucion .Ese valor lee la aplicacion y lo carga en en un textbox en el load del formulario

    Esa carpeta release voy a llevarla a otra maquina (sin instalador ) Quiero acceder a la carpeta release y cambiar en el  archivo appconfig ese valor y despues abrir el ejecutable y que tome el valor recien cambiado en el appconfig

    mi codigo es el siguiente pero no me funciona. :

       private void CambiarIntervalo(string valorintervalo)
            {
           
                System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                //Get the appSettings section.           
                AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings");
                appSettings.Settings.Remove("Intervalo");
                appSettings.Settings.Add("Intervalo", valorintervalo);
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
                          
            }

    en el load tengo lo siguiente
     private void Form1_Load(object sender, EventArgs e)
            {
                this.txtIntervalo.Text= ConfigurationManager.AppSettings["Intervalo"].ToString();
                this.CambiarIntervalo(txtIntervalo.Text.Trim());
                this.txtIntervalo.Text = ConfigurationManager.AppSettings["Intervalo"].ToString();

    Desde ya gracias.

    miércoles, 14 de marzo de 2012 15:08

Respuestas

  • imagine que te referias a esta situacion, el tema es que no hay evento que informe una aplicacion que la configuracion ha cambiado

    pero ojo si realizas un cambio y la aplicacion lee ese valor cuando lo necesita entonces tomara la actualizacion

    a donde voy es que sino mantienes en algun cache (por cache apunto a una variable global) la info del config, esta tomara el valor actualziado en la siguiente lectura

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta sebastian viga sábado, 17 de marzo de 2012 15:57
    viernes, 16 de marzo de 2012 16:43

Todas las respuestas

  • pero alli estas modificando desde codigo el archivo de configuracion que sea release o cualquier otro que importa si el cambio se aplcia igual desde tu codigo que aqui reflejas

    digo podrias dejarlo en Debug y funcionar igual

    si despues de ejecutas vas al archivo .config que esta en \bin\Release del proyecto notas que en el archivo si se impacto el cambio ?

    ---

    que sucede si usas

     ConfigurationManager.RefreshSection("appSettings")


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    jueves, 15 de marzo de 2012 5:11
  • gracias  leandro voy a probar y te lo cuento .
    jueves, 15 de marzo de 2012 15:34
  • No funciono me fui a la carpeta en este caso release y abri el appconfig y modifique  el valor , luego ejecute el exe y me tomaba el valor cdo compile el proyecto.

    el codigo que probe es este

     

    en el load del formulario hago esto

     private void Form1_Load(object sender, EventArgs e)
            {
                        ConfigurationManager.RefreshSection("appSettings");
                this.txtIntervalo.Text = ConfigurationManager.AppSettings["Intervalo"].ToString();
    gracias
    jueves, 15 de marzo de 2012 15:52
  • fui a la carpeta en este caso release y abri el appconfig y modifique  el valor

    si haces esto es logico que no va a funcionar, porque cuando compials el VS pisa lo que cambiaste, porque el VS compila sobre la carpeta \bin\Release directamente pisando dll y archivos de configuracion

    debes realizar el cambio sobre el config que tienes en el solution explorer

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 16 de marzo de 2012 2:23
  • gracias leandro , y para  hacer un comportamiento dinamico para que el usario me cambie el valor a y eso lo levante el exe   . Lo podria hacer en otro archivo que no sea de configuracion.

    Tal vez si uso reflexion?

    viernes, 16 de marzo de 2012 12:59
  • no se si entendi del todo la situacion

    el usuario cambie el valor a en donde ? o usando que?

    apuntas a que lo cambien usando el notepad en el archivo y el .exe se entere del cambio

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    viernes, 16 de marzo de 2012 13:51
  • Si con lo editen con cualquier editor  por ejemplo con el notepad y el exe se entere del cambio

    viernes, 16 de marzo de 2012 14:29
  • imagine que te referias a esta situacion, el tema es que no hay evento que informe una aplicacion que la configuracion ha cambiado

    pero ojo si realizas un cambio y la aplicacion lee ese valor cuando lo necesita entonces tomara la actualizacion

    a donde voy es que sino mantienes en algun cache (por cache apunto a una variable global) la info del config, esta tomara el valor actualziado en la siguiente lectura

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta sebastian viga sábado, 17 de marzo de 2012 15:57
    viernes, 16 de marzo de 2012 16:43
  •  leandro perdon la demora en  contestar,

    (tengo que agregar alarma :) para que me avise si me contestaron el post.)


    Espero haber entendido bien, yo por ahora hago la lectura del parametro del appconfig en el load y ahi  levanta  con el valor con el que se compilo el appconfig   como me comentaste  antes  que queda con el valor con el que se compila .Luego de compilar ,me voy a la carpeta de deploy modifico el appconfig y abro el exe
    y el exe sigue con el valor con que compilo  por mas que  el appconfig haya cambiado despues.


    lo que me diste la idea es que  mas adelante  podria  hacer que se cambie en ejecucion entre corridas viendo lo del monitor de este post http://social.msdn.microsoft.com/Forums/es-AR/winformses/thread/4182d809-c3f6-46a1-a5c4-1e6cfb762a25

    y ahi me gusto la ida de  guardar una variable global intervalo entre corridas.(para probar ) y cambiar la lectura del archivo de configuracion del load y moverlo a un metodo previo al de ejecucion de cada corrida

    gracias. y Saludos


    viernes, 16 de marzo de 2012 22:59