Есть ли способ использовать объекты и функции IronPython (скомпилированные в сборку) из кода C#?
В документации IronPython.net говорится, что MSIL в сборке не совместим с CLS, но есть ли обходной путь?
2 ответа
Это было частично мотивация для добавления dynamic
введите C# 4.0. Самая большая проблема заключается в том, что объявления IronPython не содержат информацию о типе, что затрудняет использование ее из C#. dynamic
Ключевое слово добавляет поддержку таких динамически типизированных объектов в C# 4.0. Смотрите, например:
Вызов функций / объектов из C# 3.0 немного раздражает, но все же возможно. Вам просто нужно написать что-то вроде foo.Invoke("Bar", 42)
вместо того, чтобы просто писать foo.Bar(42)
,
Я набираю это на своем телефоне, поэтому, пожалуйста, прости любые глупые ошибки. Чтобы использовать скомпилированную сборку, убедитесь, что вы компилируете с clr.CompileModules, а не с pyc.py. Затем в вашем C# вызовите метод LoadAssembly для вашего объекта Python ScriptEngine. Затем модуль можно импортировать, вызвав метод ImportModule на вашем ScriptEngine. Оттуда, если вы можете воспользоваться динамическим ключевым словом, сделайте это. В противном случае вы застрянете с некоторыми тяжелыми магическими вызовами GetVariable. Также обратите внимание, что вам нужно будет предоставить стандартную библиотеку для вашей скомпилированной сборки Python в той или иной форме.