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

16
我希望使用IronPython创建一个程序集,并从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值。如果我可以传递一个字符串并返回一个字符串,那就太好了,但我的首要任务只是来回传递数字。


你能将IronPython编译成ActiveX对象吗?如果可以,那么在C#中使用它就是小菜一碟。 - DMCS
1个回答

5
如果你的目标是创建一个包含类似于C#创建的类型的程序集,那么这实际上是不可能的。主要问题在于Python类型与CLR类型有很大的区别。其中一个问题是,Python类型可以在运行时被改变,而CLR类型是完全静态的。因此,今天实现这一点的唯一方法是使用托管接口来创建一个小的C#存根,将工作委派给Python代码。
IronPython确实具有编译为程序集的能力——这就是那篇博客文章所指的——但我们主要是为了让您能够将IronPython应用程序部署到客户端而无需提供源代码。
如果您有更具体的情况需要跟进,请在本答案下面添加评论,我很乐意提供实施建议。

Curt,感谢你的帮助提供。我更新了我的问题,以提供我正在寻找的一些具体信息。 - John D. Cook
17
这个答案在C# 4和新的动态特性下有任何改变吗? - Zack

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