[Infraestructura] - WapperFileEnsambladoInfo

Descripción general:

Clase que obtiene los datos del fichero ensamblado, el nombre, la ruta, la extension, etc.

Esta es una clase que permite acceder a los datos del ensamblado como el nombre la extensión, la ruta o la fecha de creación

Código Visual Basic


'   /** 
'   --------------------------------------------- 
'   [- (A) Contenido -] 
'   --------------------------------------------- 
'   [- Versión                 -] = 2023.09.22.0928  (año.mes.dia.horaminutos) 
'   [- Class Name              -] = WapperFileEnsambladoInfo.vb 
'   [- Descripción             -] = 
'     Obtiene datos del fichero ensamblado, el nombre, la ruta, la extension, etc. 
' 
'   --------------- 
'   [- Observaciones           -] = 
'    Creada inicialmente en el proyecto: [PruebasAssembly] 
' 
'    INTERFAZ DE LA CLASE 
'    - Public Function FileVersionInfo() As System.Diagnostics.FileVersionInfo 
'    - Public Function EnsambladoSoloNombreSinExtension() As String 
'    - Public Function EnsambladoRutaNombreYExtension() As String 
'    - Public Function EnsambladoSoloRuta() As String 
'    - Public Function EnsambladoExtension() As String 
'    - Public Function EnsambladoFechaCreacion() As String 
'   --------------- 

'   --------------------------------------------- 
'   [- (B) Información básica -] 
'   --------------------------------------------- 
'   [- Module Name             -] = WapperFileEnsambladoInfo.vb 
'   [- Propietario             -] = AGUILA - Cuenta de Trabajo 
'   [- Lenguaje                -] = es-ES (Español - España) 
'   [- Type                    -] = Visual Basic Source file 
'   --------------- 
'   [- Fecha de creación       -] = 26/03/2012 17:46:46 
'   [- Último acceso           -] = 22/09/2023 09:23:14 
'   [- Última modificación     -] = 22/09/2023 09:23:14 
'   --------------- 
'   [- Creada inicialmente en  -] = PruebasAssembly 
'   --------------------------------------------- 
'   [- (C) Propiedad intelectual -] 
'   --------------------------------------------- 
'   [- Autor Nombre            -] = (2023) Joaquin Medina Serrano 
'   [- Autor CorreoE           -] = Administrador@joaquin.medina.name 
'   [- Copyright               -] = 
'        Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivar 4.0 Internacional. 
'        Se puede consultar una copia de la licencia http://creativecommons.org/licenses/by-nc-nd/4.0/. 
'   --------------------------------------------- 
'   [- (D) Revisiones -] 
'   --------------------------------------------- 
'   [- Historial de revisiones -] = 
' - Clase creada inicialmente en el proyecto [PruebasAssembly] 
' - 2012-03-26 17:46:46 - Creación 
' - 2012-11-26 - Refactorizada y cambio de nombre esta clase 
' - 2015/01/05 - Usada en SerializacionDll 
' - 2012-11-26 - Refactorizada Quito las funciones de seguridad obsoletas 
' - 2012-11-26 - Cambiadas las funciones de [ Implements IDisposable] 
' - 2023-09/22 - Revisada 
'   --------------------------------------------- 
'   [- /Eof -] 
'   */ 
' 
' 
' ------------------------------------------------- 
Option Explicit On 
Option Strict On 
Option Infer Off 
Option Compare Binary 

Namespace Util.Ensamblado 

    ''' <summary> 
    '''   Obtiene datos del fichero ensamblado, el nombre, la ruta, la extension,etc 
    ''' </summary> 
    Public Class WapperFileEnsambladoInfo 
        Implements IDisposable 

#Region "Variables" 

        ''' ------------------------------------------------- 
        ''' <summary> 
        '''    Este es el ensamblado (se supone que se está ejecutando) 
        '''    del que se obtienen los datos 
        ''' </summary> 
        ''' ------------------------------------------------- 
        Private _ensambladoEnEjecucion As System.Reflection.Assembly = Nothing 

        ''' <summary> 
        '''   Proporciona información de versión para un archivo físico en disco. 
        ''' </summary> 
        Private _fileVersionInfo As System.Diagnostics.FileVersionInfo = Nothing 

#End Region 

#Region "Constructores" 

        ''' ------------------------------------------------- 
        ''' <summary> 
        '''     Constructor estandard los datos se obtienen sobre el ensamblado en ejecución 
        ''' </summary> 
        ''' ------------------------------------------------- 
        Public Sub New() 

            ' para obtener el ensamblado que se esta ejecutando 
            ' dim ensambladoEnEjecucion As System.Reflection.Assembly = Nothing 
            ' ensambladoEnEjecucion = System.Reflection.Assembly.GetExecutingAssembly 
            Me.New(System.Reflection.Assembly.GetExecutingAssembly) 
        End Sub 

        ''' <summary> 
        '''    Constructor, los datos se obtienen sobre el ensamblado pasado por parámetro 
        '''    que, evidentemente, puede ser distinto al que se esta ejecutando 
        ''' </summary> 
        ''' <param name = "ensambladoEnEjecucion"> 
        '''        se espera el valor [System.Reflection.Assembly.GetExecutingAssembly] 
        ''' </param> 
        Public Sub New(ByVal ensambladoEnEjecucion As System.Reflection.Assembly) 
            _ensambladoEnEjecucion = ensambladoEnEjecucion 

            ' para obtener el ensamblado que se esta ejecutando 
            ' dim ensambladoEnEjecucion As System.Reflection.Assembly = Nothing 
            ' ensambladoEnEjecucion = System.Reflection.Assembly.GetExecutingAssembly 
            Try 
                If _fileVersionInfo Is Nothing Then 
                    _fileVersionInfo = Diagnostics.FileVersionInfo.GetVersionInfo(_ensambladoEnEjecucion.Location) 
                End If 
            Catch ex As Exception 
                Throw 
            End Try 

        End Sub 

#End Region 

#Region "Funciones diversas" 

        ''' <summary> 
        ''' Version del ensamblado 
        ''' </summary> 
        ''' <returns>un objeto [FileVersionInfo]</returns> 
        Public Function FileVersionInfo() As System.Diagnostics.FileVersionInfo 

            ' obtener el valor de AssemblyTitle 
            'FileDescription 
            'cadena = System.Diagnostics.FileVersionInfo.GetVersionInfo( _ 
            '       System.Reflection.Assembly.GetExecutingAssembly.Location). _ 
            '       FileDescription.ToString(System.Globalization.CultureInfo.CurrentCulture) 
            'añadir("AssemblyTitle = FileDescription : " & cadena) 

            Try 
                If _fileVersionInfo Is Nothing Then 
                    _fileVersionInfo = FileVersionInfo.GetVersionInfo(_ensambladoEnEjecucion.Location) 
                End If 
            Catch ex As Exception 
                Throw 
            End Try 
            Return _fileVersionInfo 
        End Function 

        ''' <summary> 
        ''' Obtener el Nombre del ensamblado (Solo el nombre - sin la ruta ni la extension) 
        ''' </summary> 
        Public Function EnsambladoSoloNombreSinExtension() As String 
            Return System.IO.Path.GetFileNameWithoutExtension(Me.FileVersionInfo.FileName) 
        End Function 

#Region "Refactorizado" 
        '' =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = 
        ''Application.ExecutablePath 
        ''---------------------------------------------------- 
        '' Obtener el La ruta completa del ensamblado 
        ''---------------------------------------------------- 
        ' ''' <summary> 
        ' '''   Obtener el La ruta completa del ensamblado  (ruta + nombre + extension) 
        ' '''   utilizando Application.ExecutablePath 
        ' ''' </summary> 
        'Public Overloads Function Application_ExecutablePath() As String 
        '    Return Application.ExecutablePath 
        'End Function 
#End Region 

        '---------------------------------------------------- 
        ''' <summary> 
        '''   Obtener el La ruta completa del ensamblado  (ruta + nombre + extension) 
        ''' </summary> 
        Public Function EnsambladoRutaNombreYExtension() As String 
            Return Me.FileVersionInfo.FileName 
        End Function 

        ''' <summary> 
        '''   Obtener la ruta del ensamblado (solo la ruta) 
        ''' </summary> 
        ''' <remarks> 
        '''  Observación: obtienen el mismo valor que Application.StartupPath 
        ''' </remarks> 
        Public Function EnsambladoSoloRuta() As String 
            '-------------- 
            ' filename devuelve el nombre completo del ensamblado, desde la raíz 
            ' pe. D./aaa/bbb/bbb/ddd/ensamblado.exe 
            '-------------- 
            ' obtener solo la ruta 
            Return System.IO.Path.GetDirectoryName(FileVersionInfo.FileName) 
        End Function 

        ''' <summary> 
        ''' Obtener la extension del ensamblado 
        ''' </summary> 
        Public Function EnsambladoExtension() As String 
            '-------------- 
            ' filename devuelve el nombre completo del ensamblado, desde la raíz 
            ' pe. D./aaa/bbb/bbb/ddd/ensamblado.exe 
            '-------------- 
            ' obtener solo la ruta 
            Return System.IO.Path.GetExtension(FileVersionInfo.FileName) 

        End Function 

        ''' <summary> 
        '''  Obtener la Fecha de creación del Ensamblado 
        ''' </summary> 
        Public Function EnsambladoFechaCreacion() As String 

            '        Se espera el valor [System.Reflection.Assembly.GetExecutingAssembly] 

            Dim cadena As String = String.Empty 
            Dim Fio As System.IO.FileInfo = Nothing 
            Try 
                Fio = New System.IO.FileInfo(Me.FileVersionInfo.FileName) 

                cadena = Fio.CreationTime.ToLocalTime. 
                         ToString(System.Globalization.CultureInfo.CurrentCulture) 

            Catch ex As Exception 
                Throw 
            Finally 
                If Not (Fio Is Nothing) Then 
                    Fio = Nothing 
                End If 
            End Try 
            Return cadena 
        End Function 

        '-------------------------------------------------------------- 
        ''' <summary> 
        '''  La función que genera el informe del proceso 
        '''  Solo para comprobar resultados y funcionamiento de las funciones locales 
        ''' </summary> 
        Public Function ToInforme() As String 

            Using SW As New System.IO.StringWriter(System.Globalization.CultureInfo.CurrentCulture) 

                SW.WriteLine(" ") 
                SW.WriteLine("------------------------------------") 
                SW.WriteLine(" ### Información del EnsambladoInfo ###") 
                SW.WriteLine("{0,-16} [{1,-20}Z]", "Fecha UTC ", DateTime.UtcNow) 
                SW.WriteLine("{0,-16} [{1}]", "Fecha local ", DateTime.Now.ToString("F")) 

                SW.WriteLine(" ") 
                SW.WriteLine("{0,-16} [{1}]", "EnsambladoFechaCreacion", Me.EnsambladoFechaCreacion) 
                SW.WriteLine("{0,-16} [{1}]", "EnsambladoRutaNombreYExtension", Me.EnsambladoRutaNombreYExtension) 
                SW.WriteLine("{0,-16} [{1}]", "EnsambladoSoloNombreSinExtension", Me.EnsambladoSoloNombreSinExtension) 
                SW.WriteLine("{0,-16} [{1}]", "EnsambladoSoloRuta", Me.EnsambladoSoloRuta) 
                SW.WriteLine("{0,-16} [{1}]", "EnsambladoExtension", Me.EnsambladoExtension) 

                SW.WriteLine(" ") 
                SW.WriteLine("' / Eof informe ") 
                SW.WriteLine(" ") 
                SW.Flush() 
                Return SW.ToString 
            End Using 

        End Function 

#End Region 

#Region "IDisposable Support. [Para clases normales y bases ] Implementación de .NET Version: [2022/03/03]" 

        ''' <summary> 
        '''  Variable local para detectar llamadas redundantes que indica [True] el objeto se ha eliminado, [False], en caso contrario. 
        ''' </summary> 
        Private campoDisposedValue As System.Boolean 

        ''' <summary> 
        '''     Obtiene un valor que indica si el objeto se ha eliminado. 
        ''' </summary> 
        ''' <value> 
        '''   <para>Tipo: <see cref = "System.Boolean">Boolean</see></para> 
        '''   <para>Es true si objeto se ha eliminado; en caso contrario, es false.</para> 
        ''' </value> 
        Public Overloads ReadOnly Property IsDisposed() As System.Boolean 
            Get 
                Return campoDisposedValue 
            End Get 
        End Property 

        ''' <summary> 
        '''  [Dispose] Código de limpieza de la clase 
        ''' </summary> 
        ''' <param name = "paramQuienMeLLama">[True], llama el usuario, [False], llama el sistema</param> 
        ''' <remarks> 
        '''  <para> 
        '''     Dispose (bool quienMeLLama) se ejecuta en dos escenarios distintos. 
        '''  </para> 
        '''  <para> 
        '''     Si [quienMeLLama] es igual a true, el método ha sido llamado 
        '''     directamente, o indirectamente, por el código de un usuario. 
        '''     Los recursos administrados y no administrados se pueden eliminar. 
        '''  </para> 
        '''  <para> 
        '''     Si [quienMeLLama] es igual a false, el método ha sido llamado por el 
        '''     [runtime] desde el interior del finalizador y usted no debe hacer 
        '''     referencia a otros objetos, ni siquiera para eliminarlos. 
        '''     Solo los recursos no administrados pueden ser eliminados. 
        '''  </para> 
        ''' </remarks> 
        Protected Overridable Overloads Sub Dispose(paramQuienMeLLama As System.Boolean) 
            If Me.campoDisposedValue = False Then 
                If paramQuienMeLLama = True Then 
                    Me.campoDisposedValue = True 
                    '------------------------------------------------------------------------------------------ 
                    ' 1) Liberar UNICAMENTE objetos NO administrados. 
                    '    Son recursos que NO administra el motor en tiempo de ejecución, 
                    '    como conexiones a bases de datos 
                    '    llamadas al API de Windows, etc. el Word o Excel 
                    '------------------------------------------------------------------------------------------ 
                    'Call LiberarRecursosNoAdministrados() 

                    '------------------------------------------------------------------------------------------ 
                    ' 2) Desechar objetos SI administrados. 
                    '    Un objeto administrado es cualquier objeto de .NET 
                    '    es un objeto de .NET que maneja el motor de ejecución de NET 
                    '------------------------------------------------------------------------------------------ 
                    If Not (Me._fileVersionInfo Is Nothing) Then 
                        Me._fileVersionInfo = Nothing 
                    End If 
                    If Not (Me._ensambladoEnEjecucion Is Nothing) Then 
                        Me._ensambladoEnEjecucion = Nothing 
                    End If 

                    '------------------------------------------------------------------------------------------ 
                    ' 3) Establecer campos grandes como Null. 
                    '------------------------------------------------------------------------------------------ 
                Else 

                    '------------------------------------------------------------------------------------------ 
                    ' 1) Liberar UNICAMENTE los objetos NO administrados. 
                    '------------------------------------------------------------------------------------------ 
                    'Call LiberarRecursosNoAdministrados() 

                End If 

            End If 
        End Sub 

        '    ''' <summary> 
        '    ''' 1) Liberar objetos NO administrados. 
        '    '''    Son recursos que NO administra el motor en tiempo de ejecución, 
        '    '''    como conexiones a bases de datos 
        '    '''    llamadas al API de Windows, etc. el Word o Excel 
        '    '''    </summary> 
        '    ''' <remarks> 
        '    '''  ATENCION - Quite los comentarios de Finalize() SOLO si el anterior Dispose(disposing As Boolean) 
        '    '''             tiene código para liberar recursos no administrados. 
        '    ''' </remarks> 
        '    Private Sub LiberarRecursosNoAdministrados() 
        '        ' si no hay recursos, no hacer nada 
        '    End Sub 

        '  ''' <summary> 
        '  '''  Permite que un objeto intente liberar recursos NO ADMINISTRADOS y realizar otras operaciones de limpieza 
        '  '''  antes de que sea reclamado por la recolección de elementos no utilizados. 
        '  ''' </summary> 
        '  ''' <remarks> 
        '  '''  ATENCION - Quite los comentarios de Finalize() SOLO si el anterior Dispose(disposing As Boolean) 
        '  '''             tiene código para liberar recursos no administrados. 
        '  ''' </remarks> 
        '  Protected Overrides Sub Finalize() 
        '      'ATENCION - Quite los comentarios de Finalize() SOLO si el anterior Dispose(disposing As Boolean) 
        '      '           tiene código para liberar recursos no administrados. 
        '      ' No cambie este código. Coloque el código de limpieza en el anterior Dispose(disposing As Boolean). 
        '      Dispose(False) 
        '      MyBase.Finalize() 
        '  End Sub 

        ''' <summary> 
        '''  [Dispose] Código de limpieza de la clase 
        ''' </summary> 
        ''' <remarks> 
        '''  Visual Basic agregó este código para implementar correctamente el patrón descartable. 
        '''  No cambie este código. Coloque el código de limpieza en Dispose(disposing As Boolean). 
        ''' </remarks> 
        Public Overloads Sub Dispose() Implements IDisposable.Dispose 
            Me.Dispose(True) 
            'Este objeto se limpiará con el método Dispose. 
            'Por lo tanto, debe llamar a GC.SupressFinalize para 
            'quitar este objeto de la cola de finalización 
            'y evitar que el código de finalización para este objeto 
            'se ejecute por segunda vez. 
            GC.SuppressFinalize(Me) 
        End Sub 
#End Region 

    End Class 

End Namespace