Ottenere il nome dell'assembly


191

La classe di eccezioni di C # ha una proprietà source che è impostata sul nome dell'assembly per impostazione predefinita.
C'è un altro modo per ottenere questa stringa esatta (senza analizzare una stringa diversa)?

Ho provato quanto segue:

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

Risposte:


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

o

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

VS mostra errori sugli usi risolti. È possibile utilizzare Assembly.GetEntryAssembly (). GetName (). Name;
Butsaty,

3
In realtà dovrebbe essere typeof (any) .GetTypeInfo (). Assembly
Thaina

7

Uso l'Assemblea per impostare il titolo del modulo in quanto tale:

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
Sii contento di non chiamarlo dall'interno di un componente aggiuntivo di Office - dove GetEntryAssembly () restituirà null
PandaWood

3

Puoi provare questo codice che utilizza la System.Reflection.AssemblyTitleAttribute.Titleproprietà:

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


2

È possibile utilizzare la AssemblyNameclasse per ottenere il nome dell'assembly, purché si disponga del nome completo per l'assembly:

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

o

AssemblyName.GetAssemblyName(e.Source).Name

Riferimento MSDN - Classe AssemblyName


2
Ho ricevuto un errore a causa del parametro del metodo GetAssemblyName. Penso che avrebbe dovuto essere Assembly.GetExecutingAssembly().Locationinvece di Assembly.GetExecutingAssembly().FullName.
Uzay95,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.