如何在c#中读取外部dll文件中类的属性?

如何在c#中读取外部dll文件中类的属性?,c#,reflection,dll,propertyinfo,C#,Reflection,Dll,Propertyinfo,我有下面的代码块。如何从特定的DLL文件中获取所有属性名?目前,我可以获取类名、名称空间,但我不知道如何获取类中的属性。谢谢, foreach (Type type in myAssambly.GetTypes()) { PropertyInfo myPI = type.GetProperty("DefaultModifiers"); System.Reflection.PropertyAttributes myPA = myPI.Attributes; Message

我有下面的代码块。如何从特定的DLL文件中获取所有属性名?目前,我可以获取类名、名称空间,但我不知道如何获取类中的属性。谢谢,

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

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

如果对DLL有编译时引用,则可以使用DLL中的类型获取其程序集,然后使用代码获取属性:

var myAssembly = Assembly.GetAssembly(typeof(SomeType));
否则,您可以动态加载它:

var myAssembly = Assembly.LoadFrom(assemblyPath);

听起来你真的对房产感兴趣:

foreach (Type type in myAssembly.GetTypes())
{
    foreach (PropertyInfo property in type.GetProperties())
    {
        MessageBox.Show(property.Name + " - " + property.PropertyType);
    }
}
编辑:好的,听起来你真的很想要字段:

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

你的意思不太清楚。你是指在程序集中声明的属性类的名称,还是应用于各个成员的属性?Jon,我是指属性的名称。现在还不清楚这是什么意思。哪些属性的名称?如果你能在程序集中展示一个类型的例子,以及你的代码的预期输出,那会很有帮助。乔恩,很抱歉我不太清楚,我对这个概念太陌生了。我上传了一个具有Label5:Label属性的图像。所以Label5是控件的名称,Label是控件的类型。两样我都要。此链接具有打开my.dll的.Net Reflector映像。我想让你在图片中看到的信息看起来像是你在谈论属性,而不是属性……谢谢@JonSkeet的回答,它是有效的,但我不是在寻找属性。实际上,我需要获取PDSOptionset、Label等。这些是类的成员。@user2599346:属性是成员。也许您正在寻找字段(也是成员)?如果是这样,图像中的字段不会按照.NET命名约定命名。同样,你要找的东西也不清楚——而且,如果你在你的问题中包含了你想反映的类型的源代码,以及你要找的是哪一部分,这将非常清楚。我想我没有必要再进一步猜测了——你真的需要澄清这个问题。下面是我需要从.dll获取的一个成员的代码。Net Reflector给了我这个代码。\uPrivate作为PDSTextBox我需要像BBONNES06一样的东西-PDSTextBox@user2599346:对,这是一个字段。因此,将
GetProperties
更改为
GetFields
(并指定相关的绑定标志)。我将编辑我的答案。。。(但下次请尽量说清楚。阅读)我的问题解决了。非常感谢。我花了将近两天的时间来做这件事。愿上帝解决你的问题!