是否可以在程序集中扫描具有特定属性的方法?我目前正在开发 Visual C++ 项目,但即使是 C# 也适合我。我需要在当前程序集中找到所有具有特定属性的方法,例如。[XYZ]
应用于它。有什么想法吗?
问问题
394 次
4 回答
4
试试这个。它将在任何对象中搜索特定属性
MemberInfo[] members = obj.GetType().GetMethods();
foreach (MemberInfo m in members)
{
if (m.MemberType == MemberTypes.Method)
{
MethodInfo p = m as MethodInfo;
object[] attribs = p.GetCustomAttributes(false);
foreach (object attr in attribs)
{
XYZ v = attr as XYZ;
if (v != null)
DoSomething();
}
}
}
于 2012-05-09T17:57:15.767 回答
3
我曾使用 Microsoft Roslyn 来完成类似的任务。这应该很容易。
如果您需要任何示例代码,请告诉我。
也看看这篇文章: http: //blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/
也可以使用反射,GetCustomAttributes 方法返回给定成员上定义的所有属性...
好吧,试试这个:
this.GetType().GetMethods()
循环遍历所有方法和 GetCustomAttributes
应该是这样的。不幸的是,我妻子的笔记本电脑上没有安装 Visual Studio :)
于 2012-05-09T17:42:20.887 回答
3
给定程序集的路径:
static void FindAttributes(String^ assemblyPath)
{
Assembly^ assembly = Assembly::ReflectionOnlyLoadFrom(assemblyPath);
for each (Type^ typ in assembly->GetTypes())
{
for each (CustomAttributeData^ attr
in CustomAttributeData::GetCustomAttributes(typ))
{
Console::WriteLine( "{0}: {1}", typ, attr);
}
}
}
请记住,这会将您使用的每个程序集加载到应用程序域中,因此每次在其自己的 AppDomain 中调用此代码可能是值得的。
于 2012-05-09T21:19:04.400 回答
2
使用反射获取方法并获取属性
于 2012-05-09T19:48:56.570 回答