2

私は 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: シーケンスには、System.Linq.Enumerable.First[TSource](IEnumerable`1 ソース、Func`2 述語) に一致する要素が含まれていません。

これを機能させる方法がわからないので、助けてください。

4

1 に答える 1

0

あなたのソースまたは完全なスタックのいずれかを見るまで、確かなことはわかりませんが、必要な WPF アセンブリ (System.Windows.Media.Color の PresentationCore 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);
    }
}
于 2012-05-06T20:31:26.867 に答える