2015-09-08 56 views
0

我有以下程序:表達式錯誤與RyuJIT

class MyClass 
{ 

    public static Dictionary<string, Func<string, string, string>> FuncMap; 

    static MyClass() 
    { 
     FuncMap = new Dictionary<string, Func<string, string, string>>(); 

     FuncMap.Add("testing", (x,y) => x + " " + y); 
    } 

    public string Foo() 
    { 
     MethodInfo func = FuncMap["testing"].Method; 

     var t = Expression.Lambda<Func<string>>(Expression.Call(func, new Expression[] 
     { 
      Expression.Constant("testing"), 
      Expression.Constant("testing 2") 
     })).Compile(); 

     return t(); 
    } 
} 

class Program 
{ 

    static void Main(string[] args) 
    { 
     var inst = new MyClass(); 

     Console.WriteLine(inst.Foo()); 
    } 
} 

當我編譯這在Visual Studio 2013年的工作沒有問題,但在Visual Studio 2015年RyuJIT編譯時,我得到以下異常:

Unhandled Exception: System.ArgumentException: Static method requires null instance, non-static method requires non-null instance. 

這是RyuJIT的錯誤嗎?有沒有解決辦法?

+0

你爲什麼認爲這與RyuJIT而不是Roslyn有關? –

+1

我認爲這不太可能是由R​​yuJIT引起的,但這個假設很容易測試。以32位運行它。 RyuJIT僅支持64位。 –

+0

不是RyuJIT的bug,在x86中也是如此。 MSIL代碼生成看起來不健康,你需要在github上提交一個bug。 –

回答