我想使用IronPython创建一个程序集,可以从C#中调用它。以下是我不要求的两件事。
我不是在问IronPython如何调用C#。最容易找到的文档描述了如何从IronPython中调用C#。 (例如,IronPython附带的教程。)我想反过来,从C#调用IronPython。
我不是在问如何嵌入IronPython解释器。我找到了几个有用的参考资料(例如here和here),介绍如何从C#调用IronPython解释器。这很有帮助,但我更感兴趣的是从IronPython创建一个已编译的程序集。也就是说,我想对IronPython程序集进行方法调用,而不是将源代码字符串传递给解释器。
一旦我创建了程序集,有什么关于调用它的提示?我找到一个blog post说:
...从C#调用Python程序集 是非平凡的。那个python程序集 包含动态类型,但不包含 容易反映成有用的C# 对象。
您是否知道在IronPython和C#之间传递基本数据类型的任何备忘单?
更新:我现在最感兴趣的方案是将两个或三个double
值传递给Python并返回一个或两个double
值。如果我可以传入一个字符串并获得一个非常棒的字符串,但我的首要任务就是来回传递数字。
答案 0 :(得分:5)
如果您的目标是创建一个包含类似于C#创建的类型的程序集,那么这是不可能的。这里的主要问题是Python类型与CLR类型的工作方式大不相同。首先,它们可以在运行时进行变异,而CLR类型是完全静态的。所以今天实现这一目标的唯一方法是使用托管接口创建一个小的C#存根,它将工作委托给Python代码。
IronPython确实能够编译到程序集 - 这就是博客文章所指的内容 - 但我们这样做主要是为了让您可以将IronPython应用程序部署到客户而无需向他们提供源代码。
通过在此答案中添加评论,随意跟进更具体的方案,我很乐意提供有关如何实施的建议。