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

Odpowiedzi:


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

lub

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

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

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;


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.