2

是否可以在程序集中扫描具有特定属性的方法?我目前正在开发 Visual C++ 项目,但即使是 C# 也适合我。我需要在当前程序集中找到所有具有特定属性的方法,例如。[XYZ]应用于它。有什么想法吗?

4

4 回答 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 回答