2009-08-30 1 views
3

Я хочу, чтобы получить Агрегаты дружественных имен в текущем приложении домена и, следовательно, я написал что-то вроде этого:Получить имена Ассамблеи в текущем приложении домена

static void Main(string[] args) 
    { 
     foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies()) 
     { 
      Console.WriteLine(item.FullName); 

     } 
    } 

Но проблема в том, что это выход, что я получил, а не то, что Я желал видеть:

mscorlib, Version = 2.0.0.0, Culture = нейтрален, PublicKeyToken = b77a5c561934e0 ApplicationDomains, Version = 1.0.0.0, Culture = нейтральны, PublicKeyToken = п Улла

На самом деле я ожидал эти имена:

alt text http://www.pixelshack.us/images/xjfkrjgwqiag9s6o76x6.png

Может кто-нибудь сказать мне, если есть что-то я перепутал.

Заранее спасибо.

Или имена, которые я ожидал, были не собраны?

ответ

4

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

Вы также не получите все библиотеки, на которые имеются ссылки, только те, которые загружаются ТОЛЬКО. Если вы добавите «XmlDocument foo = новый XmlDocument()» над вашим кодом, появится System.XML.

static void Main(string[] args) 
    { 
     XmlDocument foo = new XmlDocument(); 

     foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies()) 
     { 
      Console.WriteLine(item.FullName); 

     } 
    } 

Выход:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
ConsoleApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
0
foreach(var assem in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     Console.WriteLine(assem.GetName().Name); 

    } 

Assembly.GetName() возвращает объект AssemblyName, который имеет свойство Name. Это то, что вы ищете.

+0

Это все еще возвращает «MsCorLib» – FlySwat

+0

Спасибо, это хорошо знать. – Tarik

0

Это невозможно, чтобы получить список всех ссылочных сборок во время выполнения. Даже если вы ссылаетесь на него в своем проекте визуальной студии, если вы их не используете, компилятор C# проигнорирует их, и поэтому они вообще не попадут в ваш выходной файл (exe/dll).

И для остальных ваших сборок они не загрузятся до тех пор, пока они не будут использованы.

AppDomain.CurrentDomain.GetAssemblies() дает вам массив всех загруженных сборок, и этот список может сильно отличаться от того, что вы видите в проекте визуальной студии.

+0

Спасибо за отличный ответ. С уважением. – Tarik

0

Либо используйте Assemly.GetName(). Назовите или используйте отражение, чтобы найти AssemblyTitleAttribute и использовать это значение.

 Смежные вопросы

  • Нет связанных вопросов^_^