2010-11-24 4 views
128

La classe d'exception de C# possède une propriété source qui est définie par défaut sur le nom de l'assembly.
Existe-t-il un autre moyen d'obtenir cette chaîne exacte (sans analyser une chaîne différente)?Obtention du nom de l'assembly

J'ai essayé ce qui suit:

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

Répondre

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

ou

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

VS affiche des erreurs sur la résolution des utilisations. Vous pouvez utiliser Assembly.GetEntryAssembly(). GetName(). Name; – Butsaty

+2

En fait, il devrait être typeof (any) .GetTypeInfo(). Assembly – Thaina

6

J'utilise l'Assemblée pour le titre de la forme en tant que tel:

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

Vous pouvez utiliser la classe AssemblyName pour obtenir l'assemb nom ly, à condition que vous avez le nom complet de l'assemblée:

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

ou

AssemblyName.GetAssemblyName(e.Source).Name 

MSDN Reference - AssemblyName Class

+1

J'ai eu une erreur à cause du paramètre de la méthode GetAssemblyName. Je pense que cela aurait dû être 'Assembly.GetExecutingAssembly(). Location' au lieu de' Assembly.GetExecutingAssembly(). FullName'. – uzay95

2

Vous pouvez essayer ce code qui utilise la propriété System.Reflection.AssemblyTitleAttribute.Title:

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

Questions connexes