IronPython 2.7.7:无法从程序集 'Microsoft.Scripting 加载类型 'System.TypeExtensions',版本 =1.2.0.0

IronPython 2.7.7: Could not load type 'System.TypeExtensions' from assembly 'Microsoft.Scripting, Version=1.2.0.0

我在 运行 在 Visual Studio 2015 C# 控制台应用程序项目中 运行 在 Linqpad 环境中成功 运行 处理一些 IronPython 代码时遇到问题。所以我假设我设置环境的方式存在问题,但我无法诊断问题。

这是我的代码:

using IronPython.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;    

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var options = new Dictionary<string, object>();
            options["Frames"] = true;
            options["FullFrames"] = true;
            //The exception is thrown by the line below
            var engine = Python.CreateEngine(options);
            string pyscript = @"";    

            var script = engine.CreateScriptSourceFromString(pyscript);
            var paths = engine.GetSearchPaths();
        }
    }
}

Python.CreateEngine(options) 最终抛出异常:

An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in Microsoft.Scripting.dll

其内部异常显示为:

Could not load type 'System.TypeExtensions' from assembly 'Microsoft.Scripting, Version=1.2.0.0, Culture=neutral

内部异常来源:

IronPython

内部异常堆栈跟踪:

at IronPython.Runtime.PythonContext.GetInitialPrefix()
at IronPython.Runtime.PythonContext..ctor(ScriptDomainManager manager, IDictionary`2 options)

此项目引用了 IronPython.StdLib (2.7.7),它使用的是 IronPython (2.7.7)

我使用 dotPeek 浏览了与 IronPython 相关的 dll,但似乎找不到任何引用名为 "System.TypeExtensions" 的类型的内容。当我 google 寻找它时,我似乎找不到这样的类型。

关于我为什么会收到此异常的任何想法?

看起来我的 Linqpad 环境和我的 Visual Studio 环境之间的区别在于他们使用的 DynamicLanguageRuntime 版本。 Linqpad 使用的是 Microsoft.Scripting.dll 的最低兼容版本:1.1.2,而 Visual Studio(通过 Paket)使用的是应该兼容的较新版本:1.2.0.100.l。这些版本号对应于 DynamicLanguageRuntime 的 nuget 版本。

IronPython 2.7.7 应该与 DynamicLanguageRuntime (>= 1.1.2) 兼容,但事实并非如此。我要 post 关于 GitHub 项目的一个问题。但目前,使用 DynamicLanguageRuntime 1.1.2 是一种解决方法。

编辑:This appears to be a known issue.