2010-11-24 1 views
128

Класс исключения C# имеет свойство source, которое по умолчанию установлено на имя сборки.
Есть ли другой способ получить эту точную строку (без разбора другой строки)?Получение имени сборки

Я попытался следующие:

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

ответ

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

или

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

VS показывать ошибки при разрешении. Вы можете использовать Assembly.GetEntryAssembly(). GetName(). Name; – Butsaty

+2

На самом деле это должен быть typeof (any) .GetTypeInfo(). Assembly – Thaina

6

Я использую Ассамблею, чтобы установить название форме как таковой:

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

Вы можете использовать класс AssemblyName, чтобы получить сборку имя LY, если у вас есть полное имя для сборки:

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

или

AssemblyName.GetAssemblyName(e.Source).Name 

MSDN Reference - AssemblyName Class

+1

У меня возникла ошибка из-за параметра метода GetAssemblyName. Я думаю, что это должно быть 'Assembly.GetExecutingAssembly(). Location' вместо' Assembly.GetExecutingAssembly(). FullName'. – uzay95

2

Вы можете попробовать этот код, который использует System.Reflection.AssemblyTitleAttribute.Title свойство:

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