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