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

标签 assemblies ironpython

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

  • 我不是在问如何从 IronPython 调用 C#。最容易找到的文档描述了如何从 IronPython 内部调用 C#。 (例如 IronPython 附带的教程。)我想做相反的事情,从 C# 调用 IronPython。
  • 我不是在问如何嵌入 IronPython 解释器。我找到了一些关于如何从 C# 调用 IronPython 解释器的有用引用资料(例如 herehere )。这很有帮助,但我对从 IronPython 创建编译程序集更感兴趣。也就是说,我想对 IronPython 程序集进行方法调用,而不是将源代码字符串传递给解释器。

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

    ... calling a Python assembly from C# is non-trivial. That python assembly contains dynamic types, which are not easily reflected into useful C# objects.



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

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

    最佳答案

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

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

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

    关于assemblies - 如何在 IronPython 中创建 .NET 程序集并从 C# 调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561509/

    相关文章:

    c# - 加载程序集无法正常工作

    c# - 我如何在项目中引用 "added as link"时的 dll?

    c# - 是否可以构建一个程序集,并将其强制为特定的构建#?

    python - 编写适用于 CPython、Jython 和 IronPython 的 Python 代码有哪些策略?

    python - 可以在 ironpython 2.7.5 中使用请求吗?

    c# - 在类库中的何处处理 AssemblyResolve 事件?

    c# - 将常量移动到单独的程序集

    c# - 在不安装 Python 的情况下在 .NET 环境中运行 Python 代码

    c# - 从 C# 应用程序将命令行参数传递给 IronPython?

    .net - 在 IronPython 中使用 R.NET 程序集