我在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”的类型的东西。当我谷歌四处寻找时,我似乎无法找到这样的类型。
关于为什么我得到这个例外的任何想法?
答案 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是一种解决方法。