使用mono从C#调用IronPython对象

3
我有以下的IronPython代码。
class Hello:
    def __init__(self):
        pass
    def add(self, x, y):
        return (x+y)

我需要从C#中调用此代码,我编写了以下代码。

using System;
using IronPython.Hosting;
using IronPython.Runtime;
using IronPython;
using Microsoft.Scripting.Hosting;
using Microsoft.Scripting;

class Hello {
    public static void Main()
    {
        ScriptEngine engine = Python.CreateEngine();
        ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
        ScriptScope scope = engine.CreateScope();

        script.Execute(scope);
    }
}

在复制了IronPython.dll后,我运行了以下命令(尝试使用gacutil运行,但遇到了错误):
 dmcs /r:IronPython.dll callipy.cs
但是我得到了以下错误消息:
无法加载文件或程序集“Microsoft.Scripting.ExtensionAttribute,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其一个依赖项。
在程序集/Users/smcho/Desktop/cs/namespace/IronPython.dll中,类型System.Runtime.CompilerServices.ExtensionAttribute的构造方法丢失。
找不到自定义属性构造函数的映像:/Users/smcho/Desktop/cs/namespace/IronPython.dll mtoken: 0x0a000080
无法加载文件或程序集“Microsoft.Scripting.Core,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其一个依赖项。
无法加载文件或程序集“Microsoft.Scripting.Core,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其一个依赖项。
无法加载文件或程序集“Microsoft.Scripting.Core,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其一个依赖项。
...
看起来IronPython需要Microsoft.Scripting.Core,但是在mono上我不知道该怎么做?
  • C#是否能在Mono上运行IronPython对象?如果可以,如何操作?
1个回答

13

IronPython不是一个独立的DLL。它有一些依赖项应该已经随IronPython一起提供(它们包含在面向.NET 2.0的最新压缩分发版中--请参阅IronPython下载页面):

IronPython.Modules.dll
Microsoft.Dynamic.dll
Microsoft.Scripting.dll
Microsoft.Scripting.Core.dll
Microsoft.Scripting.Debugging.dll
Microsoft.Scripting.ExtensionAttribute.dll

请确保您的项目能够找到这些DLL文件(目前无法找到,这就是为什么您会收到错误信息的原因)。我从未尝试在Mono上运行IronPython,但它应该可以正常工作

请注意,针对.NET 4.0的IronPython版本不包括(也不需要)Microsoft.Scripting.Core.dll和Microsoft.Scripting.ExtensionAttribute.dll,因为它们的功能已经合并到了System.Core中。有关更多详细信息,请参见此答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接