2010-02-03 4 views
5

This page Sur le site d'aide IronRuby, il est question de pouvoir "exiger" des assemblys connus, tels que System.Windows.Forms, sans avoir besoin de lancer l'intégralité de "ah-come-on-gimme-a-break-here -vous-ne-pouvez-pas-être-sérieux 'fort nom de l'assemblée.IronRuby - comment exiger des assemblys .NET sans nom fort?

Dans la documentation, il est dit ceci:

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

Mais quand j'essaie même « besoin », je reçois ceci:

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

Qu'est-ce que je pourrais faire mal? Cela pourrait-il être un problème d'installation? Je ne peux pas voir ce "répertoire libs sur le chemin de chargement" qui est mentionné dans la documentation. La documentation est-elle incorrecte?

Merci.

Répondre

2

Eh bien, il était un problème d'installation - il y avait deux copies de ir.exe dans le téléchargement IronRuby, et j'utilisais le mauvais.

7

La façon dont cela fonctionne est parce que les gars de IronRuby ont écrit un tas de scripts wrapper.

Regardez dans <your ironruby install path>\lib\ironruby et vous verrez System.Windows.Forms.rb, System.Drawing.rb etc.

Qu'est-ce qui se passe quand vous faites require 'System.Windows.Forms' est que IronRuby trouve ce fichier rb et l'exécute. Le code à l'intérieur de ce fichier ne fait que le nom fort complet requis pour vous.

Si vous voulez charger d'autres dll est qu'ils ont pas écrit wrappers pour, vous avez 3 options:

  1. exigent le chemin complet au dll (par exemple c:\program files\whatever\whatever\blah.dll)

  2. exiger la nom fort (cela ne fonctionne que si elle est dans le GAC ou ailleurs IronRuby peut trouver dll) dans

  3. d'utilisation load_assembly - C'est le plus pratique, mais IIRC il charge le dll dans le LoadFrom contexte, pas le contexte Load.
    Si vous ne comprenez pas ce que cela signifie, puis au fond, c'est bien dans les tests, mais ne le font pas dans la production :-)

+1

Merci - il est intéressant de voir comment les gens IronRuby mis en œuvre cela. – mackenir

+0

J'ai rencontré un problème différent et l'utilisation de 'load_assembly' l'a corrigé. Où puis-je trouver plus de détails sur les différences entre 'require' et' load_assembly'? –

Questions connexes