none
Manipulacion de Archivo de Recursos String RRS feed

  • Pregunta

  • Saludos y Bendiciones a Todos

    Bueno, Explico mi dilema.

    Estoy desarrollando en vb.net una app y esta dentro de sus acciones genera un archivo log diario para registrar las acciones y procesos que realiza, el formato es: fecha, hora, código proceso o acción. Pero me di cuenta que cuando surgía algún error o quería saber si cierto proceso se había realizado tenia que buscar la descripción del código, lo que hacia lento y difícil saber a que se refería el código, y que debía tener a mano la lista con de las descripciones de cada código.

    Entonces pensé en hacer una dll que tuviera todo la lista con las descripciones de los códigos para de esta manera si tenia que ampliar la lista de códigos solo modificaría un solo archivo y no la app, y buscando encontré que como en vb6 se podía usar archivos de recursos incrustados en las app o en una dll y de esta manera poder incluir el código y la descripción en el archivo de log.

    Pero todo lo que he leído muestra a como incrustar archivos de imágenes u otro archivo como recurso y como usarlos. pero no hablan nada de un archivo de texto como recurso y que dentro tenga cadenas del tipo llave=valor y de como acceder a ellas por código. y lo mas fome  por así decirlo lo que he encontrado sobre esto es confuso y que el archivo hay que compilarlo como archivo .resources binario y recién incrustarlo al proyecto compilado en esta caso a la dll.

    Espero me haya explicado bien y estoy que dejo todo tirado. Están complejo hacerlo? Help

    domingo, 24 de septiembre de 2017 19:38

Respuestas

  • Alberto...

    Primero quiero agradecerte por la ayuda, tus comentarios me indicaron algunos aspectos que no estaba considerando al realizar la utilización de recursos.

    Expongo un código de ejemplo de lo que hice y me funciono...

    Nombre Proyecto = AdmErr10
    Nombre Archivo resx = DesErr.resx
    
    Imports System.Reflection
    Imports System.Resources
    
    Public Class AdmErr
        Public Class ConvErr
    
            Public Shared Function fnConvErr(ByVal strCodErr As String) As String
                Dim objAdmRec As New ResourceManager("AdmErr10.DesErr", GetType(AdmErr).Assembly)
    
                Return CType(objAdmRec.GetString(strCodErr), String)
    
            End Function
        End Class
        
        'Otras Clases del proyecto
        Public Class OtrasClases
        End Class
    End Class

    y Lo Llame de esta manera...

    Imports AdmErr10.AdmErr
    
    Private Sub Button1_Click(Byval sender As System.Object, Byval e As System.EventArgs)Handles Button1.Click
    
        Try
    
            MsgBox(ConvErr.fnConvErr(TextBox1.Text))
    
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Esto es lo que hice, por si Algun Colega quiere verlo, Si Cometi Algun Error o No es la Manera Me Dicen..

    Y Vuelvo a decir Gracias Alberto.

    Bendiciones a Todos.

    • Marcado como respuesta Negochile martes, 26 de septiembre de 2017 14:28
    martes, 26 de septiembre de 2017 14:26

Todas las respuestas

  • En VB.NET es mucho más sencillo que todo eso. Simplemente añade al proyecto un archivo de recursos (.resx). Haz doble-clic para abrirlo en el diseñador, y de forma predeterminada se abre en modo "strings", en donde te orece una pantalla que hace justo lo que tú quieres, es decir, metes parejas de nombre y valor.

    Después, para acceder a los recursos dentro de tu código, accedes por su nombre, es decir, NombreDelResx.NombreDelString.

    lunes, 25 de septiembre de 2017 8:14
  • Hola Alberto y gracias...

    Y eso es lo que pienso que debiera ser mas fácil programar no mas complejo...

    bueno volviendo al tema tienes algún ejemplo de lo que mencionas por que he tratado de aplicar lo que he visto y no funciona nada...

    Te cuento que lo estoy tratando de hacer en una biblioteca de clase o sea una dl, con una función que me recupere la descripción del archivo de recursos basándome en el código enviado y como tu decías eso fue lo que hice agregue un archivo de recursos (.resx) y see abrió en modo "String" y me pareció genial entonces escribi los código de prueba y las descripciones correspondientes y hice otro proyecto un Windows form para llamar a esta dll y ver si funcionaba y nada... 

    Espero se entienda lo que dije, y gracias por tu ayuda.

    lunes, 25 de septiembre de 2017 15:40
  • Si, tiene que funcionar en una DLL, exactamente igual que si lo hubieses puesto dentro del mismo proyecto. Por supuesto, al igual que cualquier otra cosa que pones en una DLL, a la hora de llamarlo hay que tener cuidado de poner el espacio de nombres correcto. Esto no es culpa del resx, tendrias que ponerlo exactamente igual si estuvieras llamando a cualquier propiedad de cualquier clase escrita por ti.

    Si no funciona, ponnos aqui una muestra de lo que has hecho, y la transcripcion del error que sale (preferiblemente si puede ser con capturas de pantalla), y miramos a ver por que puede estar fallando.

    lunes, 25 de septiembre de 2017 16:04
  • Ok, entiendo...

    Pero tu no tienes algún código que muestre lo que comentas, o de algún lugar donde haya uno. Porque no es lo mismo estar al ojo, que ver algo claro, puede que no este comprendiendo la forma de hacerlo, y voy ha estar con ensayo y error, no crees tu.

    Y nuevamente gracias.

    lunes, 25 de septiembre de 2017 19:42
  • El código es más o menos así:

    Dim MiVariable as String = My.Resources.MisRecursos.MiCadena

    Ejemplo de código

    lunes, 25 de septiembre de 2017 20:29
  • Alberto Gracias..

    Aaaa a eso te referías, pero eso me hace preguntarme lo siguiente, si tengo 60 pares nombre valor y creo una función donde el parámetro de entrada es el código, y lo que me retorna la función es la descripción de  ese código.

    Como obtendría el valor, usando lo que me explicas?

    Saludos

    lunes, 25 de septiembre de 2017 20:42
  • Es algo así como

    ResourceManager.GetString(nombreDeLaCadena, resourceCulture)

    Si abres el fichero .Designer.vb que se generó automáticamente al añadir el .resx (por defecto está oculto en el explorador de soluciones, pero puedes hacerlo visible pulsando el iconito de "ver todo" en la parte de arriba), verás en su interior cómo hace uso del ResourceManager y cómo obtiene el resourceCulture. Puedes llamar a las mismas funciones desde tu propio código.

    martes, 26 de septiembre de 2017 6:27
  • Alberto...

    Primero quiero agradecerte por la ayuda, tus comentarios me indicaron algunos aspectos que no estaba considerando al realizar la utilización de recursos.

    Expongo un código de ejemplo de lo que hice y me funciono...

    Nombre Proyecto = AdmErr10
    Nombre Archivo resx = DesErr.resx
    
    Imports System.Reflection
    Imports System.Resources
    
    Public Class AdmErr
        Public Class ConvErr
    
            Public Shared Function fnConvErr(ByVal strCodErr As String) As String
                Dim objAdmRec As New ResourceManager("AdmErr10.DesErr", GetType(AdmErr).Assembly)
    
                Return CType(objAdmRec.GetString(strCodErr), String)
    
            End Function
        End Class
        
        'Otras Clases del proyecto
        Public Class OtrasClases
        End Class
    End Class

    y Lo Llame de esta manera...

    Imports AdmErr10.AdmErr
    
    Private Sub Button1_Click(Byval sender As System.Object, Byval e As System.EventArgs)Handles Button1.Click
    
        Try
    
            MsgBox(ConvErr.fnConvErr(TextBox1.Text))
    
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Esto es lo que hice, por si Algun Colega quiere verlo, Si Cometi Algun Error o No es la Manera Me Dicen..

    Y Vuelvo a decir Gracias Alberto.

    Bendiciones a Todos.

    • Marcado como respuesta Negochile martes, 26 de septiembre de 2017 14:28
    martes, 26 de septiembre de 2017 14:26