Подтвердить что ты не робот

Как создать сборку .NET в IronPython и вызвать ее из С#?

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

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

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

Как только я создал сборку, какие подсказки в ней? Один сообщение в блоге Я нашел:

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

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

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

4b9b3361

Ответ 1

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

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

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