IronRuby - как требовать сборки .NET без строгого имени? - PullRequest
5 голосов
/ 03 февраля 2010

На этой странице на веб-сайте справки IronRuby говорится о возможности «требовать» некоторых известных сборок, таких как System.Windows.Forms, без необходимости проверять всю « ах-приход». -on-gimme-a-break-here-you-not-be-серьезно 'строгое название сборки.

В документах сказано:

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

Но когда я пытаюсь сделать то же самое 'require', я получаю это:

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

Что я могу делать не так? Может ли это быть проблема установки? Я не вижу этот "каталог libs на пути загрузки", который упоминается в документации. Документация неправильная?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 28 февраля 2010

Это работает потому, что парни из IronRuby написали несколько сценариев-обёрток.

Загляните в <your ironruby install path>\lib\ironruby, и вы увидите System.Windows.Forms.rb, System.Drawing.rb и т. Д.

Что происходит, когда вы делаете require 'System.Windows.Forms', так это то, что IronRuby находит этот файл rb и запускает его.Код внутри этого файла просто выполняет полное требование со строгим именем.

Если вы хотите загрузить другие библиотеки DLL, для которых они не написали оболочки, у вас есть 3 варианта:

  1. требуется полный путь к dll (например, c:\program files\whatever\whatever\blah.dll)

  2. требуется строгое имя (это работает, только если оно находится в GAC или где-то еще, IronRuby может найти DLLin)

  3. use load_assembly - Это наиболее удобно, но IIRC загружает dll в контекст LoadFrom, а не в контекст Load.
    Если выне понимаю, что это значит, тогда в принципе это нормально в тестировании, но не делайте этого в производстве: -)

2 голосов
/ 03 февраля 2010

Ну, это было проблемой установки - в загрузке IronRuby было две копии ir.exe, и я использовал неправильную.

...