显然,类型名称
ClassLibrary1.MyCustomAttribute
在您的代码中,即使它们具有相同的命名空间和简单名称,也不表示与您加载的程序集中声明的类型相同的类型。
您将使用以下命令获得正确的类型
assembly.GetType
,以同样的方式你得到
Type
代表
Class1
.
var props = assembly.GetType("ClassLibrary1.Class1").GetProperties().Where(
prop => Attribute.IsDefined(prop, assembly.GetType("ClassLibrary1.MyCustomAttribute"))
);
得到
Message
使用反射,
var attributeType = assembly.GetType("ClassLibrary1.MyCustomAttribute");
var messageProperty = attributeType.GetProperty("Message");
object[] attrs = prop.GetCustomAttributes(false);
foreach (object attr in attrs)
{
if (attributeType.IsInstanceOfType(attr))
{
string propName = prop.Name;
string message = messageProperty.GetValue(attr);
Console.WriteLine($"{propName} ... {message }");
}
}