2009-02-18 14 views
16

Quiero crear un ensamblaje utilizando IronPython puede llamarlo desde C#. Aquí hay dos cosas que estoy no preguntando.¿Cómo creo un ensamblado .NET en IronPython y lo llamo desde C#?

  1. No estoy preguntando cómo llamar a C# desde IronPython. La documentación más fácil de encontrar describe cómo llamar a C# desde IronPython. (Por ejemplo, el tutorial que se envía con IronPython.) Quiero hacer lo contrario, llamar a IronPython desde C#.

  2. No estoy pidiendo cómo incrustar el intérprete IronPython. He encontrado varias referencias útiles (por ejemplo, here y here) sobre cómo llamar al intérprete de IronPython desde C#. Eso es útil, pero estoy más interesado en crear un ensamblado compilado de IronPython. Es decir, me gustaría realizar llamadas a métodos en el ensamblaje de IronPython en lugar de pasar cadenas de código fuente al intérprete.

Una vez que he creado el conjunto, ¿cuáles son algunos consejos para llamar? Una blog post encontré dijo:

... llama a un montaje de Python desde C# no es trivial. Que el montaje pitón contiene tipos dinámicos, que no son reflejadas fácilmente en útiles C# objetos.

¿Conoces algún tipo de hoja de trucos para pasar tipos de datos básicos entre IronPython y C#?

actualización: El escenario que más me interesa por ahora está pasando dos o tres double valores en Python y conseguir uno o dos double valores de nuevo. Si pudiera pasar una cuerda y recuperar una cuerda sería fantástico, pero mi primera prioridad es simplemente pasar números de un lado a otro.

+0

¿Se puede compilar el IronPython en un objeto ActiveX? Si es así, consumirlo con C# no es pan comido. – DMCS

+0

Wayback Máquina para [crear y consumir IronPython Asambleas] (https://web.archive.org/web/20090828232639/http://www.sogeti-phoenix.com/Blogs/post/2008/03/Creating-and- Consuming-IronPython-Assemblies.aspx) – Ouroborus

Respuesta

5

Esto no es realmente posible si su objetivo es crear un conjunto que contiene tipos que se parecen a los tipos creados por C#. El problema principal aquí es que los tipos de Python funcionan de manera considerablemente diferente que los tipos de CLR. Por un lado, pueden mutarse en tiempo de ejecución mientras que los tipos CLR son totalmente estáticos. Entonces, la única forma de lograr esto hoy es usar las interfaces de alojamiento para crear un pequeño apéndice de C# que delegue el trabajo en el código de Python.

IronPython tiene la capacidad para compilar a una asamblea - que es lo que se refiere a la entrada del blog - pero lo hizo principalmente por lo que se podría desplegar una aplicación IronPython a sus clientes sin tener que darles el código fuente .

No dude en hacer un seguimiento con un escenario más específica añadiendo un comentario a esta respuesta, y yo estaremos encantados de proporcionar asesoramiento sobre cómo poner en práctica.

+0

Curt, gracias por su oferta de ayuda. Actualicé mi pregunta para proporcionar algunos detalles de lo que estoy buscando. –

+16

¿esta respuesta ha cambiado alguna con C# 4 y las nuevas características dinámicas? – Zack

Cuestiones relacionadas