如何在IronPython中创建.NET程序集并从C#调用它?

时间:2009-02-18 15:28:36

标签: assemblies ironpython

我想使用IronPython创建一个程序集,可以从C#中调用它。以下是我要求的两件事。

  1. 我不是在问IronPython如何调用C#。最容易找到的文档描述了如何从IronPython中调用C#。 (例如,IronPython附带的教程。)我想反过来,从C#调用IronPython。

  2. 我不是在问如何嵌入IronPython解释器。我找到了几个有用的参考资料(例如herehere),介绍如何从C#调用IronPython解释器。这很有帮助,但我更感兴趣的是从IronPython创建一个已编译的程序集。也就是说,我想对IronPython程序集进行方法调用,而不是将源代码字符串传递给解释器。

  3. 一旦我创建了程序集,有什么关于调用它的提示?我找到一个blog post说:

      

    ...从C#调用Python程序集   是非平凡的。那个python程序集   包含动态类型,但不包含   容易反映成有用的C#   对象。

    您是否知道在IronPython和C#之间传递基本数据类型的任何备忘单?

    更新:我现在最感兴趣的方案是将两个或三个double值传递给Python并返回一个或两个double值。如果我可以传入一个字符串并获得一个非常棒的字符串,但我的首要任务就是来回传递数字。

1 个答案:

答案 0 :(得分:5)

如果您的目标是创建一个包含类似于C#创建的类型的程序集,那么这是不可能的。这里的主要问题是Python类型与CLR类型的工作方式大不相同。首先,它们可以在运行时进行变异,而CLR类型是完全静态的。所以今天实现这一目标的唯一方法是使用托管接口创建一个小的C#存根,它将工作委托给Python代码。

IronPython确实能够编译到程序集 - 这就是博客文章所指的内容 - 但我们这样做主要是为了让您可以将IronPython应用程序部署到客户而无需向他们提供源代码。

通过在此答案中添加评论,随意跟进更具体的方案,我很乐意提供有关如何实施的建议。