IronRuby - 如何要求没有强名称的.NET程序集?

时间:2010-02-03 17:36:18

标签: ironruby require

IronRuby帮助网站上的

This page谈论能够“需要”一些众所周知的程序集,例如System.Windows.Forms,而不需要动摇整个'啊 - 来吧 - gimme-a-break-here-you-you-you-serious-serious '强大的集会名称。

在文档中它说:

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

但是当我尝试相同的'要求'时,我明白了:

>>> 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 个答案:

答案 0 :(得分:7)

这种方式的工作方式是因为IronRuby的人写了一堆包装脚本。

查看<your ironruby install path>\lib\ironruby,您会看到System.Windows.Forms.rbSystem.Drawing.rb等。

执行require 'System.Windows.Forms'时会发生什么事情是IronRuby找到rb文件并运行它。该文件中的代码只为您执行完整的强名称需求。

如果你想加载他们没有写过包装的其他dll,你有3个选择:

  1. 需要dll的完整路径(例如c:\program files\whatever\whatever\blah.dll

  2. 需要强名称(只有在GAC或其他地方IronRuby可以找到dll的情况下才有效)

  3. 使用load_assembly - 这是最方便的,但是IIRC会将dll加载到LoadFrom上下文,而不是Load上下文。
    如果你不明白这意味着什么,那么基本上它在测试中很好,但是不要在生产中这样做: - )

答案 1 :(得分:2)

嗯, 是一个设置问题 - IronRuby下载中有两个ir.exe副本,而我使用的是错误的。