如何从运行时加载的c#dll程序集中读取方法属性?

时间:2013-12-01 04:11:29

标签: c# .net dll reflection assemblies

我正在尝试在运行时加载c#DLL程序集,并使用反射从类方法中查找属性及其包含的值。

截至目前,我的代码看起来像这样加载程序集并查找属性:

private void ReadAttributes()
    {
        Assembly assembly = Assembly.LoadFile(Path.GetFullPath("TestLib.dll"));
        Type type = assembly.GetType("TestLib.test");
        if (type != null)
        {
            MethodInfo[] methods = type.GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            foreach (MethodInfo m in methods)
            {
                foreach (Attribute a in Attribute.GetCustomAttributes(m, false))
                {
                    Console.WriteLine(a);
                    foreach (FieldInfo f in a.GetType().GetFields())
                    {
                        Console.WriteLine("\t{0}: {1}", f.Name, f.GetValue(a));
                    }
                }
            }
        }
    }

并且dll文件中的代码如下所示:

[AttributeUsage(AttributeTargets.Method)]
    public class Author : Attribute
    {
        public string name;
        public double version;

        public Author(string name)
        {
            this.name = name;
            version = 1.0;
        }
    }

    public class Test
    {
        private string name = "";

        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }

        [Author("Andrew")]
        public void Message(string mess)
        {
            Console.WriteLine(mess);
        }

        [Author("Andrew")]
        public void End()
        {
            Console.WriteLine("Press enter to continue...");
            Console.ReadLine();
        }

        public double Power(double num, int pow)
        {
            return Math.Pow(num, pow);
        }
    }

如果我在同一个程序集中使用此代码而不是动态加载它,它就可以工作。 但是当我像这样动态加载程序集时,方法会被加载但没有属性。

我的代码是否有不正确的内容,或者我正在尝试使用System.Reflection无法实现的内容?

注意: dll不是主程序的依赖项,因此我们不能在编译期间引用属性/类类型。

0 个答案:

没有答案