2010-02-03 5 views
5

This page auf der IronRuby-Hilfe-Website spricht darüber, in der Lage zu sein, einige bekannte Baugruppen wie System.Windows.Forms "erfordern", ohne die gesamte 'ah-kommen-auf-gimme-a-break-hier -Sie können nicht ernst sein 'starker Name der Baugruppe.IronRuby - wie benötigt man .NET Assemblies ohne starken Namen?

In der Dokumentation sagt es das:

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

Aber wenn ich das gleiche versuchen 'verlangen', bekomme ich diese:

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

Was könnte ich falsch gemacht? Könnte es ein Setup-Problem sein? Ich kann dieses "libs-Verzeichnis auf dem Ladepfad" nicht sehen, das in der Dokumentation erwähnt wird. Ist die Dokumentation falsch?

Danke.

Antwort

2

Nun, es war ein Setup-Problem - es gab zwei Kopien von ir.exe im Download IronRuby, und ich war mit dem falschen.

7

Das funktioniert, weil die IronRuby-Jungs eine Reihe von Wrapper-Skripten geschrieben haben.

Blick in <your ironruby install path>\lib\ironruby und Sie werden System.Windows.Forms.rb, System.Drawing.rb usw.

sehen, was passiert, wenn Sie tun require 'System.Windows.Forms' ist, dass IronRuby dass rb Datei findet und es läuft. Der Code in dieser Datei benötigt nur den vollen Namen mit dem starken Namen.

Wenn Sie andere DLL geladen werden soll, dass sie für nicht geschrieben Wrapper haben, haben Sie 3 Möglichkeiten:

  1. benötigen Sie den vollständigen Pfad zu der DLL (zB c:\program files\whatever\whatever\blah.dll)

  2. erfordern die starke Namen (dies funktioniert nur, wenn es im GAC ist oder irgendwo sonst kann IronRuby dLL in finden)

  3. Verwendung load_assembly - Dies ist die bequemste, aber IIRC lädt er die dLL in die LoadFrom Kontext, nicht der Load Kontext.
    Wenn Sie nicht verstehen, was das bedeutet, dann im Grunde ist es bei der Prüfung in Ordnung, aber tut es nicht in der Produktion :-)

+1

Dank - es ist interessant zu sehen, wie das IronRuby Volk dies umgesetzt. – mackenir

+0

Ich hatte ein anderes Problem, und mit 'load_assembly' wurde es behoben. Wo finde ich weitere Details zu den Unterschieden zwischen 'require' und' load_assembly'? –