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

时间:2018-02-06 16:25:25

标签: ironpython

我在Visual Studio 2015 C#控制台应用程序项目中运行一些IronPython代码时遇到了问题,该项目已在Linqpad环境中成功运行。所以我认为我的环境设置存在问题,但我在诊断问题时遇到了问题。

这是我的代码:

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”的类型的东西。当我谷歌四处寻找时,我似乎无法找到这样的类型。

关于为什么我得到这个例外的任何想法?

1 个答案:

答案 0 :(得分:0)

看起来我的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(&gt; = 1.1.2)兼容,但似乎并非如此。我将在GitHub项目上发布一个问题。但目前,使用DynamicLanguageRuntime 1.1.2是一种解决方法。

修改:This appears to be a known issue