我尝试使用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");
}
}
}
答案 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);