Obteniendo el nombre del ensamblado

191

La clase de excepción de C # tiene una propiedad de origen que se establece en el nombre del ensamblado de forma predeterminada.
¿Hay otra forma de obtener esta cadena exacta (sin analizar una cadena diferente)?

He probado lo siguiente:

catch(Exception e)
{
    string str = e.Source;         
    //"EPA" - what I want               
    str = System.Reflection.Assembly.GetExecutingAssembly().FullName;
    //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    str = typeof(Program).FullName;
    //"EPA.Program"
    str = typeof(Program).Assembly.FullName;
    //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    str = typeof(Program).Assembly.ToString();
    //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    str = typeof(Program).AssemblyQualifiedName;
    //"EPA.Program, EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
}
Patricio
fuente

Respuestas:

350
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name

o

typeof(Program).Assembly.GetName().Name;
Jaster
fuente
VS muestra errores al resolver usos. Puede usar Assembly.GetEntryAssembly (). GetName (). Name;
Butsaty
3
En realidad, debería ser typeof (any) .GetTypeInfo (). Assembly
Thaina
7

Utilizo la Asamblea para establecer el título del formulario como tal:

private String BuildFormTitle()
{
    String AppName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
    String FormTitle = String.Format("{0} {1} ({2})", 
                                     AppName, 
                                     Application.ProductName, 
                                     Application.ProductVersion);
    return FormTitle;
}
Jim Lahman
fuente
1
Alégrate de no estar llamando desde un complemento de Office, donde GetEntryAssembly () devolverá nulo
PandaWood
3

Puedes probar este código que usa la System.Reflection.AssemblyTitleAttribute.Titlepropiedad:

((AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false)).Title;


fuente
2

Puede usar la AssemblyNameclase para obtener el nombre del ensamblado, siempre que tenga el nombre completo del ensamblado:

AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().FullName).Name

o

AssemblyName.GetAssemblyName(e.Source).Name

Referencia de MSDN - Clase AssemblyName

Kiran
fuente
2
Obtuve un error debido al parámetro del método GetAssemblyName. Creo que debería haber sido en Assembly.GetExecutingAssembly().Locationlugar de Assembly.GetExecutingAssembly().FullName.
uzay95
0

Assembly.GetExecutingAssembly (). Ubicación

ivan.ukr
fuente