我正在使用IronPython并尝试从脚本中实例化一种颜色并将其返回。 我得到了这个方法,并将此字符串作为参数发送
@"
from System.Windows.Media import Color
c = Color()
c.A = 100
c.B = 200
c.R = 100
c.G = 150
c
");
_python = Python.CreateEngine();
public dynamic ExectureStatements(string expression)
{
ScriptScope scope = _python.CreateScope();
ScriptSource source = _python.CreateScriptSourceFromString(expression);
return source.Execute(scope);
}
当我运行此代码时,我得到了
$ exception {System.InvalidOperationException:Sequence不包含匹配元素 在System.Linq.Enumerable.First [TSource](IEnumerable`1 source,Func`2谓词)..等等。
我无法弄清楚如何让它发挥作用,所以请帮助我。
答案 0 :(得分:0)
在我看到你的更多源代码或完整堆栈之前我不会确定,但我猜你错过了python引擎包含对必要的WPF程序集的引用(PresentationCore for System.Windows)。 Media.Color AFAICT)。
根据您是否关心需要引用同一个库的C#调用者,您可以更改它的引用方式,但只需添加PresentationCore就可以引用必要的程序集(不带字符串:),然后添加它到IronPython运行时。
以下代码运行良好并打印出#646496C8
using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
class Program
{
private static ScriptEngine _python;
private static readonly string _script = @"
from System.Windows.Media import Color
c = Color()
c.A = 100
c.B = 200
c.R = 100
c.G = 150
c
";
public static dynamic ExectureStatements(string expression)
{
var neededAssembly = typeof(System.Windows.Media.Color).Assembly;
_python.Runtime.LoadAssembly(neededAssembly);
ScriptScope scope = _python.CreateScope();
ScriptSource source = _python.CreateScriptSourceFromString(expression);
return source.Execute(scope);
}
static void Main(string[] args)
{
_python = Python.CreateEngine();
var output = ExectureStatements(_script);
Console.WriteLine(output);
}
}