Как создать сборку .NET в IronPython и вызвать ее из C #? - PullRequest
16 голосов
/ 18 февраля 2009

Я хочу создать сборку, используя IronPython, могу вызвать ее из C #. Вот две вещи, которые я не спрашиваю.

  1. Я не спрашиваю, как вызвать C # из IronPython. Самая простая документация для поиска описывает, как вызывать C # из IronPython. (Например, учебник, который поставляется с IronPython.) Я хочу сделать обратное, вызвать IronPython из C #.

  2. Я не спрашиваю, как встроить интерпретатор IronPython. Я нашел несколько полезных ссылок (например, здесь и здесь ) о том, как вызывать интерпретатор IronPython из C #. Это полезно, но меня больше интересует создание скомпилированной сборки из IronPython. То есть я хотел бы делать вызовы методов в сборке IronPython, а не передавать строки исходного кода интерпретатору.

После того, как я создал сборку, какие советы по ее созданию? Один пост в блоге Я нашел сказал:

... вызов сборки Python из C # нетривиально. Эта сборка Python содержит динамические типы, которые не являются легко отражается в полезном C # объекты.

Знаете ли вы какие-нибудь шпаргалки для передачи основных типов данных между IronPython и C #?

Обновление : Сценарий, который меня сейчас больше всего интересует, это передача двух или трех значений double в Python и получение одного или двух значений double обратно. Если бы я мог передать строку и получить строку назад, это было бы потрясающе, но мой первый приоритет - просто передавать числа вперед и назад.

1 Ответ

5 голосов
/ 19 февраля 2009

Это на самом деле невозможно, если ваша цель - создать сборку, которая содержит типы, похожие на типы, созданные в C #. Основная проблема здесь заключается в том, что типы Python работают значительно иначе, чем типы CLR. Во-первых, они могут быть изменены во время выполнения, в то время как типы CLR полностью статичны. Таким образом, единственный способ достичь этого сегодня - это использовать интерфейсы хостинга для создания небольшой заглушки C #, которая делегирует работу коду Python.

IronPython имеет возможность компилировать в сборку - на что ссылается этот пост в блоге - но мы сделали это в первую очередь, чтобы вы могли развернуть приложение IronPython для своих клиентов, не предоставляя им исходный код.

Не стесняйтесь следовать более конкретному сценарию, добавив комментарий к этому ответу, и я буду рад дать совет о том, как его реализовать.

...