CoreCLR

时间:2015-11-18 15:20:05

标签: c# reflection dnx coreclr

我尝试使用CoreCLR动态调用特定类型的成员,但在针对DNXCORE50进行编译时,方法Type.InvokeMember不可用。但是,如果我针对DNX451编译它可以正常工作。

以下是使用DNX451如何实现这一目标的示例,但我如何在DNXCORE50中执行相同操作?

using System;
using System.Reflection;

namespace InvokeMember
{
    public class Program
    {
        public void Main(string[] args)
        {
            typeof (Program).InvokeMember("DoStuff", BindingFlags.InvokeMethod, null, new Program(), null);
        }

        public void DoStuff()
        {
            Console.WriteLine("Doing stuff");
        }
    }

}

2 个答案:

答案 0 :(得分:4)

使用此代码,它可以工作:

        MethodInfo method = typeof(Program).GetTypeInfo().GetDeclaredMethod("DoStuff");
        method.Invoke(new Program(), null);

答案 1 :(得分:0)

对于那些可能一直使用Type.InvokeMember()和BindingFlags.SetProperty来设置对象属性(而不是BindingFlags.InvokeMethod)的人,你可以使用这个从答案中略微修改的语法由@aguetat给出:

PropertyInfo property = typeof(Program).GetTypeInfo().GetDeclaredProperty("MyProperty");
property.SetValue(new Program(), newValue);