none
Borrar user.config

    Pregunta

  • Bajo ciertas circunstancias (corte de energía, p.ej.) el archivo user.config se corrompe. La solución que usé (para seguir el desarrollo) es borrar manualmente el archivo en c:\Users....\AppData\....\user.config y luego usar config.reload(), donde config es una instancia de My.MySettings.

    Ahora bien, no he podido hacerlo en tiempo de ejecución, ya que no encuentro la forma de acceder al FileName de User.config. Lei por ahi que debería obtenerse así:


          Try

    ....................

            Catch ex As Configuration.ConfigurationException
                Dim filename As String = ex.InnerException.Filename
                System.IO.File.Delete(filename)
                config.Reload()
            End Try

    Sin embargo, si bien en la ventana de Inspección ex tiene la propiedad InnerException.FileName, esta no aparece como miembro en el editor, y tengo error de compilación. Uso VB 2015. 

    Alguien tiene la solución?

    Cordiales saludos

    Daniel


     
    miércoles, 1 de febrero de 2017 14:08

Respuestas

  • Para poder compilar el acceso al FileName, tienes que hacer un "Cast" del InnerException al tipo correcto de excepción que contiene el Filename. Es algo parecido a esto:

    Dim filename As String = CType(ex.InnerException, LoQueSeaException).Filename

    Evidentemente, donde he puesto "LoqQueSeaException" hay que poner el tipo correcto, que yo ahora mismo no sé cuál es, pero si puedes reproducir la excepción con el debugger, el propio debugger te permitirá examinar el InnerException para ver cuál es su tipo.

    • Marcado como respuesta Daniel_Tango miércoles, 1 de febrero de 2017 22:09
    miércoles, 1 de febrero de 2017 21:29

Todas las respuestas

  • Para poder compilar el acceso al FileName, tienes que hacer un "Cast" del InnerException al tipo correcto de excepción que contiene el Filename. Es algo parecido a esto:

    Dim filename As String = CType(ex.InnerException, LoQueSeaException).Filename

    Evidentemente, donde he puesto "LoqQueSeaException" hay que poner el tipo correcto, que yo ahora mismo no sé cuál es, pero si puedes reproducir la excepción con el debugger, el propio debugger te permitirá examinar el InnerException para ver cuál es su tipo.

    • Marcado como respuesta Daniel_Tango miércoles, 1 de febrero de 2017 22:09
    miércoles, 1 de febrero de 2017 21:29
  • Gracias Alberto!

    Después de algunas pruebas, esto devuelve el nombre completo del archivo:

    ............

     Catch ex As Configuration.ConfigurationException

     Dim mi_filename As String = CType(ex.InnerException, System.Configuration.ConfigurationException).Filename

    Cordiales saludos

    miércoles, 1 de febrero de 2017 22:09