【问题标题】:How do I create a .NET assembly in IronPython and call it from C#?如何在 IronPython 中创建 .NET 程序集并从 C# 调用它?
【发布时间】:2009-02-18 15:28:36
【问题描述】:

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

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

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

创建程序集后,调用它有哪些技巧?我发现一个blog post说:

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

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

更新:我现在最感兴趣的场景是将两三个 double 值传递给 Python 并返回一两个 double 值。如果我可以传入一个字符串并返回一个字符串,那就太棒了,但我的首要任务只是来回传递数字。

【问题讨论】:

标签: assemblies ironpython


【解决方案1】:

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

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

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

【讨论】:

  • Curt,感谢您提供帮助。我更新了我的问题,以提供一些我正在寻找的细节。
  • 这个答案是否对 C# 4 和新的动态特性有所改变?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2023-03-19
相关资源
最近更新 更多