2010-02-03 10 views
5

This page en el sitio web de ayuda de IronRuby habla de ser capaz de 'requerir' algunos ensambles conocidos como System.Windows.Forms sin necesidad de arrancar todo 'ah-come-on-gimme-a-break-here -usted-no-puede-ser-serio 'nombre fuerte del ensamblado.IronRuby: ¿cómo exigir ensamblados .NET sin un nombre seguro?

En la documentación que dice esto:

>>> require "System.Windows.Forms" 
=> true 

Pero cuando trato de la misma 'requieren', me sale esto:

>>> require "System.Windows.Forms" 
IronRuby.Libraries:0:in 'require': no such file to load -- System.Windows.Forms (LoadError) 
     from :0:in 'Initialize##1' 

¿Qué podría estar haciendo mal? ¿Podría ser un problema de instalación? No puedo ver este "directorio de libs en la ruta de carga" que se menciona en la documentación. ¿La documentación está equivocada?

Gracias.

Respuesta

2

Bueno, era un problema de instalación: había dos copias de ir.exe en la descarga de IronRuby, y estaba usando la incorrecta.

7

La forma en que esto funciona es porque los chicos de IronRuby han escrito un montón de scripts de envoltura.

Buscar en <your ironruby install path>\lib\ironruby y verá System.Windows.Forms.rb, etc. System.Drawing.rb

¿Qué pasa cuando haces require 'System.Windows.Forms' es que IronRuby encuentra ese archivo rb y lo ejecuta. El código dentro de ese archivo solo requiere el nombre completo requerido para usted.

Si desea cargar otra DLL que no han escrito contenedores para, usted tiene 3 opciones:

  1. requieren la ruta completa al archivo DLL (por ejemplo c:\program files\whatever\whatever\blah.dll)

  2. requerir la nombre seguro (esto sólo funciona si está en el GAC o en otro lugar IronRuby puede encontrar DLL) en

  3. uso load_assembly - este es el más conveniente, pero IIRC se carga el archivo DLL en el LoadFrom contexto, no el contexto Load.
    Si usted no entiende lo que eso significa, entonces, básicamente, que está bien en la prueba, pero no lo hacen en la producción :-)

+1

Gracias - es interesante ver cómo la gente IronRuby implementa esto. – mackenir

+0

Tuve un problema diferente y el uso de 'load_assembly' lo solucionó. ¿Dónde puedo encontrar más detalles sobre las diferencias entre 'require' y' load_assembly'? –

Cuestiones relacionadas