none
Insertar una key en app.config RRS feed

  • Pregunta

  • Buenos días.

    Tengo el siguiente código

    protected void ButtonInsertarClaveNueva_Click(object sender, EventArgs e)
    {
        string clave = this.TextBoxInsertarClaveNueva.Text;
        string valor = this.TextBoxInsertarValorNuevo.Text;
        if (!string.IsNullOrWhiteSpace(clave))
        {
            try
            {
                var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
                var settings = configFile.AppSettings.Settings;
                if (settings[clave] == null)
                {
                    settings.Add(clave, valor);
                }
                else
                {
                    settings[clave].Value = valor;
                }
                configFile.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error writing app settings: " + ex.ToString());
            }
        }
    }

    Y cuando lo ejecuto la instrucción

    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal)
    

    Me da el error.

    Debe especificarse exePath cuando no se ejecute en un único exe.

       en System.Configuration.ConfigurationManager.OpenExeConfigurationImpl(ConfigurationFileMap fileMap, Boolean isMachine, ConfigurationUserLevel userLevel, String exePath, Boolean preLoad)
       en System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel userLevel)
       en ExplicacionesSobreFrameworkWebForms.WebConfig.ButtonInsertarClaveNueva_Click(Object sender, EventArgs e) en C:\Users\lperez\Source\Repos\ExplicacionesSobre\ExplicacionesSobreFrameworkWebForms\Webs\WebConfig.aspx.cs:línea 54

    viernes, 4 de octubre de 2019 11:30

Respuestas

  • Tienes razón en que no se puede hacer en web.

    Así que he cogido ese mismo código. Y lo he puesto en un proyecto Form.

    Me da la excepción

    {"Las propiedades de ConfigurationSection no pueden editarse cuando está bloqueada."}

    Sigo queriendo insertar/modificar keys en un archivo app.config en ahora un proyecto Form


    • Editado Dudando MH viernes, 11 de octubre de 2019 10:37 Detallar más
    • Marcado como respuesta Pablo RubioModerator viernes, 11 de octubre de 2019 15:34
    viernes, 11 de octubre de 2019 10:37

Todas las respuestas

  • No, lo del app.config no es válido para una aplicación asp.net. Esto es solo para aplicaciones de escritorio. En una aplicación de escritorio le pasas la ruta del fichero .exe (aunque estés haciendo la llamada desde una dll) proque el .config que hay que modificar siempre es el del exe que llama a la dll (las dlls no tienen .config en tiempo de ejecución). De eso se te queja el mensaje de error: no le has pasado el .exe. Y en una aplicación web no tiene sentido porque está formado solo por dlls (no hay exe).

    Para una aplicación web (porque estás haciendo una aplicación web, ¿verdad? -- pusiste la pregunta en el foro de ASp.NET) existe una llamada similar, que es algo así como OpenWebConfiguration o algo por el estilo (no recuerdo de memoria el nombre exacto). PERO: Seguramente no funcionará. Una vez que despliegas en producción una aplicación ASP.NET, lo más normal es que por razones de seguridad no tenga permiso de escritura sobre su propio directorio, y en consecuencia no pueda modificar el web.config. Y si cambias los permisos para que pueda hacerlo, surge otro problema: cuando se modifica el web.config, la aplicación asp.net se resetea y se pierden todos los estados de sesión para todos los usuarios.

    Así que no es buena idea que la aplicación ASP.NET modifique su web.config en tiempo de ejecución. Si necesitas salvar algún dato de configuración, debe hacerse en otro sitio que sea escribible en tiempo de ejecución, como por ejemplo en base de datos, o en un fichero que se ubique en alguna ruta que NO esté bajo la raíz del sitio web y sobre la que se haya concedido el oportuno permiso.

    • Propuesto como respuesta Pablo RubioModerator miércoles, 9 de octubre de 2019 15:31
    • Marcado como respuesta Pablo RubioModerator miércoles, 9 de octubre de 2019 15:32
    • Desmarcado como respuesta Dudando MH viernes, 11 de octubre de 2019 10:32
    • Votado como útil Dudando MH viernes, 11 de octubre de 2019 10:33
    viernes, 4 de octubre de 2019 12:32
  • Tienes razón en que no se puede hacer en web.

    Así que he cogido ese mismo código. Y lo he puesto en un proyecto Form.

    Me da la excepción

    {"Las propiedades de ConfigurationSection no pueden editarse cuando está bloqueada."}

    Sigo queriendo insertar/modificar keys en un archivo app.config en ahora un proyecto Form


    • Editado Dudando MH viernes, 11 de octubre de 2019 10:37 Detallar más
    • Marcado como respuesta Pablo RubioModerator viernes, 11 de octubre de 2019 15:34
    viernes, 11 de octubre de 2019 10:37