Есть ли способ использовать объекты и функции Ironpython (скомпилированы в сборку) из C # код?
-
05-10-2019 - |
Вопрос
Document Mypython.net Документация говорит, что MSIL в сборке не CLS-совместимо, но есть ли обходной путь?
Решение
Это было частично мотивацией для добавления dynamic
Тип к C # 4.0. Самая большая проблема заключается в том, что объявления Ironpython не включают в себя информацию о типах, что затрудняет его использовать из C #. То dynamic
Ключевое слово добавляет поддержку таких динамически набранных объектов к C # 4.0. Смотреть, например:
Функции вызова / объекты из C # 3.0 немного более раздражают, но это все еще возможно. Отказ Вам просто нужно будет написать что-то вроде foo.Invoke("Bar", 42)
вместо того, чтобы просто писать foo.Bar(42)
.
Другие советы
Я набираю это на моем телефоне, поэтому, пожалуйста, простите глупые ошибки. Чтобы использовать собранную сборку, убедитесь, что вы компилируете с CLR.comPileModules, а не PYCPY. Затем в вашем C # вызовите метод loadashty на своем объекте Python Scriptengine. Затем модуль может быть импортирован путем вызова метода ImportModule в вашем ScriptEngine. Оттуда, если вы можете воспользоваться преимуществами динамического ключевого слова, сделайте это. В противном случае вы будете застрять с тяжелыми призывами в Magic String для GetVariable. Также обратите внимание, что вам придется предоставить стандартную библиотеку на вашу сборку сборной Python в одной форме или другой.