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的錯誤嗎?有沒有解決辦法?
你爲什麼認爲這與RyuJIT而不是Roslyn有關? –
我認爲這不太可能是由RyuJIT引起的,但這個假設很容易測試。以32位運行它。 RyuJIT僅支持64位。 –
不是RyuJIT的bug,在x86中也是如此。 MSIL代碼生成看起來不健康,你需要在github上提交一個bug。 –