2015-11-18 29 views
6

我想動態調用使用CoreCLR的特定類型的成員,但在針對DNXCORE50進行編譯時,Type.InvokeMember方法不可用。但是,如果我編譯對DNX451它工作正常。CoreCLR的Type.InvokeMember(..)

下面是使用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"); 
     } 
    } 

} 

回答

4

有了這個代碼,它的工作原理:

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

原始代碼應太,如果他在'GetTypeInfo的()'拋出。 –

+0

@BenVoigt:GetTypeInfo()。InvokeMember不起作用。 'TypeInfo'不包含'InvokeMember'的定義,並且沒有找到接受'TypeInfo'類型的第一個參數的擴展方法'InvokeMember'(您是否缺少using指令或程序集引用?)\t InvokeMember.DNX核心5.0 – henningst

0

對於那些可能使用Type.InvokeMember()已經用BindingFlags.SetProperty設置一個對象(而不是BindingFlags.InvokeMethod),你可以在任何財產使用這個語法,稍微從由@aguetat給出的答案修改:

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