Obtenir le nom de l'assembly

194

La classe d'exception de C # a 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)?

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"
}
Patrick
la source

Réponses:

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

ou

typeof(Program).Assembly.GetName().Name;
Jaster
la source
VS affiche des erreurs sur les utilisations de résolution. Vous pouvez utiliser Assembly.GetEntryAssembly (). GetName (). Name;
Butsaty
3
En fait, il devrait être typeof (any) .GetTypeInfo (). Assembly
Thaina
8

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;
}
Jim Lahman
la source
1
Soyez simplement heureux que vous n'appeliez pas cela à partir d'un complément Office - où GetEntryAssembly () retournera null
PandaWood
Dans mon cas, j'ai besoin d'exécuter le nom exe plutôt que le nom de la DLL de la bibliothèque. Cela fonctionne très bien
Val
3

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

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


la source
2

Vous pouvez utiliser la AssemblyNameclasse pour obtenir le nom de l'assembly, à condition que vous ayez le nom complet de l'assembly:

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

ou

AssemblyName.GetAssemblyName(e.Source).Name

Référence MSDN - Classe AssemblyName

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

Assembly.GetExecutingAssembly (). Emplacement

ivan.ukr
la source