el Guille, la Web del Visual Basic, C#, .NET y más...

Simular My.Application.Info en C#

 
Publicado el 29/Ago/2007
Actualizado el 21/Nov/2007
Autor: Guillermo 'guille' Som

Aquí te explico cómo simular el objeto My.Application.Info de Visual Basic 2005 (o superior) para usar desde Visual C#.



 

Actualizaciones:

Actualización del 21/Nov/2007:

He modificado algunas de las propiedades y he añadido nuevas.
En el texto del artículo (por dejar el original) solo digo que implementa Title, Copyright y Version, pero ahora tiene también las propiedades: ProductName, CompanyName, Trademark, Description y FileVersion (esta última no está en el objeto Info de VB).
Además la propiedad Version ahora devuelve la versión del ensamblado, mientras que FileVersion es la versión mostrada por Windows.
Title ahora muestra el valor de FileDescription (que es en realidad el título del ensamblado), antes devolvía ProductName que en realidad es la propiedad ProductName que devuelve en VB.

También he añadido el código para usar el "tipo" My.Application.Info con un alias para que sea más fácil de manejar, tal como se muestra en el código de ejemplo.

 

Introducción:

Al convertir hoy el ejemplo de Buscar ficheros de Visual Basic 2005 a Visual C# 2005, me he topado con el objeto My.Application.Info que suelo usar de vez en cuando, así que... como quería mostrar también el código completo (en el zip) de la utilidad de buscar ficheros para C#, pues... me he tenido que fabricar el código correspondiente a ese objeto de Visual Basic 2005, que como puedes ver es bastante simple de simular, y aunque en esta primera "conversión" o adaptación solo he tenido en cuenta tres propiedades: Title, Copyright y Version, seguro que te resultará fácil (si así lo quieres) convertir el resto de propiedades.

Nota:
Aquí también incluyo el código para simular My.Settings que ya te mostré hace unas fechas.

Como vas a comprobar es súper simple, pero... creo que te puede servir... a mi me sirve, además de que al tenerlo aquí publicado, me ahorro el tener que buscar en mi disco, je, je.

Este código, lo pegas dentro del espacio de nombres que crea el propio diseñador de formularios. Aunque también lo puedes poner en una clase aparte, pero que esté en el mismo espacio de nombres que el proyecto.

// Simular (en parte) el objeto My de Visual Basic 2005 (o superior)
// Nuevas propiedades                                           (21/Nov/07)

// My.Settings y My.Application.Info
static class My
{
    // My.Settings
    public static Properties.Settings Settings
    {
        get
        {
            return Properties.Settings.Default;
        }
    }

    // My.Application.Info
    public static class Application
    {
        
        public static class Info
        {
            static System.Diagnostics.FileVersionInfo fvi;
            static System.Reflection.Assembly ensamblado;
            static AssemblyName an;

            static Info()
            {
                ensamblado = System.Reflection.Assembly.GetExecutingAssembly();
                fvi = FileVersionInfo.GetVersionInfo(ensamblado.Location);
                an = ensamblado.GetName();
            }
            
            /// <summary>
            /// La versión del ensamblado
            /// Equivale al atributo AssemblyVersion
            /// </summary>
            public static Version Version
            {
                get
                {
                    return an.Version;
                }
            }
            
            /// <summary>
            /// La versión del ensamblado (FileVersion)
            /// equivale al atributo: AssemblyFileVersion
            /// </summary>
            public static Version FileVersion
            {
                get
                {
                    return new Version(fvi.FileVersion);
                }
            }

            public static string Title
            {
                get
                {
                    return fvi.FileDescription; 
                    // antes mostraba esto: fvi.ProductName;
                }
            }
            public static string Copyright
            {
                get
                {
                    return fvi.LegalCopyright;
                }
            }
            public static string ProductName
            {
                get
                {
                    return fvi.ProductName;
                }
            }
            public static string CompanyName
            {
                get
                {
                    return fvi.CompanyName;
                }
            }
            public static string Trademark
            {
                get
                {
                    return fvi.LegalTrademarks;
                }
            }
            public static string Description
            {
                get
                {
                    return fvi.Comments;
                }
            }

        }
    }
}

 

Para usarlo, puedes hacer algo como esto:

this.txtDir.Text = My.Settings.Directorio;
this.txtFiltro.Text = My.Settings.Filtro;
this.chkConSubDir.Checked = My.Settings.conSubDir;
this.chkIgnorarError.Checked = My.Settings.IgnorarError;

this.LabelInfo.Text = My.Application.Info.Title + 
                      " v" + My.Application.Info.Version.ToString() + 
                      " - " + My.Application.Info.Copyright;

 

Si no quieres estar repitiendo lo de My.Application.Info, puedes agregar un "alias" al tipo de esta forma:

using miInfo = My.Application.Info;

Creando ese alias, puedes usarlo tal como te muestro a continuación:

this.Text = String.Format("Acerca de {0}", miInfo.Title);
this.LabelProductName.Text = miInfo.Title;
this.labelProduct.Text = String.Format("{0} v{1}", miInfo.Title, miInfo.Version);
// Mostrar la versión del ensamblado y el valor de Windows
this.LabelVersion.Text = "Versión " + miInfo.Version.ToString() + " (" + miInfo.FileVersion + ")";
this.LabelCopyright.Text = String.Format("{0} ({1})", miInfo.Copyright, miInfo.CompanyName);
this.LabelCompanyName.Text = miInfo.Trademark;
this.TextBoxDescription.Text = miInfo.Description;

 

Nota:
El using deberías ponerlo después del namespace del proyecto donde esté definida la clase My.
En el caso de que esa clase esté en otro espacio de nombres, tendrás que añadírselo al using, por ejemplo, si el espacio de nombres en el que está esa clase My se llama Utilidades, tendrás que hacer algo así:
using miInfo = Utilidades.My.Application.Info;

 

Y esto es todo...

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

 



 


La fecha/hora en el servidor es: 23/12/2024 3:22:42

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024