Uzyskiwanie nazwy zestawu

191

Klasa wyjątku C # ma właściwość source, która domyślnie jest ustawiona na nazwę zestawu.
Czy istnieje inny sposób na uzyskanie tego dokładnego ciągu (bez parsowania innego ciągu)?

Próbowałem następujące:

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
źródło

Odpowiedzi:

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

lub

typeof(Program).Assembly.GetName().Name;
Jaster
źródło
VS pokazują błędy przy rozwiązywaniu problemów. Możesz użyć Assembly.GetEntryAssembly (). GetName (). Name;
Butsaty
3
Właściwie powinno to być typeof (any) .GetTypeInfo (). Assembly
Thaina
7

Używam Zgromadzenia, aby ustawić tytuł formularza jako taki:

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
źródło
1
Po prostu ciesz się, że nie wywołujesz tego z poziomu pakietu Office - gdzie GetEntryAssembly () zwróci wartość null
PandaWood
3

Możesz wypróbować ten kod, który korzysta z System.Reflection.AssemblyTitleAttribute.Titlewłaściwości:

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


źródło
2

Możesz użyć tej AssemblyNameklasy, aby uzyskać nazwę zestawu, pod warunkiem, że masz pełną nazwę zestawu:

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

lub

AssemblyName.GetAssemblyName(e.Source).Name

Odniesienie MSDN - Klasa AssemblyName

Kiran
źródło
2
Wystąpił błąd z powodu parametru metody GetAssemblyName. Myślę, że powinno być Assembly.GetExecutingAssembly().Locationzamiast Assembly.GetExecutingAssembly().FullName.
uzay95
0

Assembly.GetExecutingAssembly (). Lokalizacja

ivan.ukr
źródło