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

Réponses:


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

ou

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

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

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;


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.