251 votes

Obtenir le nom de l'assemblage

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

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

451voto

Jaster Points 2125
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name

o

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

0 votes

VS montre des erreurs sur les utilisations de résolution. Vous pouvez utiliser Assembly.GetEntryAssembly().GetName().Name ;

5 votes

En fait, ce devrait être typeof(any).GetTypeInfo().Assembly.

1 votes

@Thaina. Je sais que c'est un vieux commentaire, mais pourriez-vous expliquer pourquoi vous devez utiliser GetTypeInfo().

11voto

kiran Points 159

Vous pouvez utiliser le AssemblyName pour obtenir le nom de l'assemblage, à condition que vous ayez le nom complet de l'assemblage :

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

o

AssemblyName.GetAssemblyName(e.Source).Name

Référence MSDN - Classe AssemblyName

4 votes

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

10voto

Jim Lahman Points 826

J'utilise l'Assemblée pour définir le titre du formulaire comme 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;
}

2 votes

Heureusement, vous n'appelez pas cette fonction à partir d'un addiciel Office, où GetEntryAssembly() renvoie un résultat nul.

0 votes

Dans mon cas, j'ai besoin du nom de l'exe d'exécution plutôt que du nom de la dll de la bibliothèque. Cela fonctionne très bien

3voto

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

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

1voto

ipx Points 97

Assembly.GetExecutingAssembly().Location

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X