2013-08-12 1 views
0

У меня есть следующий код. Как я могу получить все имена атрибутов из определенного DLL-файла? В настоящее время я могу получить имена классов, пространство имен, но я не знаю, как получить атрибуты в классе. Спасибо,Как читать атрибуты класса во внешнем файле dll в C#?

foreach (Type type in myAssambly.GetTypes()) 
{ 
    PropertyInfo myPI = type.GetProperty("DefaultModifiers"); 
    System.Reflection.PropertyAttributes myPA = myPI.Attributes; 

    MessageBox.Show(myPA.ToString()); 
} 
+1

Это не совсем понятно, что вы имеете в виду. Вы имеете в виду имена классов атрибутов, объявленных в сборке, или атрибуты, применяемые к различным членам? –

+0

Jon, я имею в виду имена атрибутов. – user2599346

+0

Пока неясно, что вы подразумеваете под этим. Названия *, которые * атрибуты? Это поможет, если вы покажете пример типов в сборке и ожидаемый вывод вашего кода. –

ответ

1

Это звучит, как на самом деле вы заинтересованы в свойствах:

foreach (Type type in myAssembly.GetTypes()) 
{ 
    foreach (PropertyInfo property in type.GetProperties()) 
    { 
     MessageBox.Show(property.Name + " - " + property.PropertyType); 
    } 
} 

EDIT: Хорошо, так что это звучит, как вы действительно очень хотите поля:

foreach (Type type in myAssembly.GetTypes()) 
{ 
    foreach (FieldInfo field in type.GetFields(BindingFlags.Instance | 
               BindingFlags.Static | 
               BindingFlags.Public | 
               BindingFlags.NonPublic)) 
    { 
     MessageBox.Show(field.Name + " - " + field.FieldType); 
    } 
} 
+0

Спасибо @ JonSkeet для ответа, он работает, но я не ищу свойства. На самом деле мне нужно получить PDSOptionset, Label и т. Д. Это члены класса. – user2599346

+0

@ user2599346: Свойства * являются * членами. Возможно, вы ищете поля (которые также являются членами)? Если это так, поля в вашем изображении не называются следующими соглашениями об именах .NET. Опять же, очень неясно, что вы ищете - и опять же, было бы * очень ясно, если бы вы включили исходный код одного из типов, которые вы пытаетесь отразить в своем вопросе, и какие части это вы ищете. Я не думаю, что есть какой-то момент, когда я догадываюсь о дальнейшем - вам действительно нужно прояснить вопрос. –

+0

Ниже приведен код члена, который мне нужно получить из .dll. .Net Reflector дал мне этот код. _ Частный _BBONNES06 Как PDSTextBox мне нужно, чтобы получить что-то вроде BBONNES06 - PDSTextBox – user2599346

0

Если у вас есть ссылки во время компиляции в DLL, вы можете использовать тип от него, чтобы получить его сборку, а затем использовать свой код, чтобы получить атрибуты:

var myAssembly = Assembly.GetAssembly(typeof(SomeType)); 

В противном случае вы можете загрузить его динамически:

var myAssembly = Assembly.LoadFrom(assemblyPath);