2009-02-18 29 views
16

我想创建一个使用IronPython的程序集可以从C#调用它。这里有两件事我是不是问。如何在IronPython中创建.NET程序集并从C#调用它?

  1. 我不问如何从IronPython调用C#。最简单的文档描述如何从IronPython内部调用C#。 (例如,IronPython附带的教程。)我想做相反的事,从C#调用IronPython。

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

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

...调用从C# 一个Python组件是不平凡的。 python程序集 包含动态类型,它们不是 很容易反映成有用的C# 对象。

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

更新:我最感兴趣的是,现在的情况是通过两个或三个double值到Python和获取一个或两个double值回。如果我可以传递一个字符串并获得一个很棒的字符串,但我的首要任务是来回传递数字。

+0

你可以将IronPython编译成ActiveX对象吗?如果是这样,C#使用它是不容易的。 – DMCS 2009-02-18 21:47:23

+0

用于[创建和使用IronPython程序集]的Wayback机器(https://web.archive.org/web/20090828232639/http://www.sogeti-phoenix.com/Blogs/post/2008/03/Creating-and- Consuming-IronPython-Assemblies.aspx) – Ouroborus 2017-05-11 15:52:31

回答

5

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

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

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

相关问题