2010-11-24 73 views
128

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

he intentado 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" 
} 

Respuesta

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

o

typeof(Program).Assembly.GetName().Name; 
+0

VS muestra errores en la resolución de los usos. Puede usar Assembly.GetEntryAssembly(). GetName(). Name; – Butsaty

+2

En realidad debería ser typeof (cualquiera) .GetTypeInfo(). Conjunto – Thaina

6

utilizo la Asamblea para establecer el título de la forma 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; 
} 
1

Se puede utilizar la clase AssemblyName para obtener el ensamblaje Nombre Ly, siempre que tenga el nombre completo para el montaje:

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

o

AssemblyName.GetAssemblyName(e.Source).Name 

MSDN Reference - AssemblyName Class

+1

Recibí el error debido al parámetro del método GetAssemblyName. Creo que debería haber sido 'Assembly.GetExecutingAssembly(). Location' en lugar de' Assembly.GetExecutingAssembly(). FullName'. – uzay95

2

Usted podría intentar el código que utiliza la propiedad System.Reflection.AssemblyTitleAttribute.Title:

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

Cuestiones relacionadas