使用与IronRuby标准模块具有相同名称和名称空间的.NET程序集

时间:2014-07-06 10:38:38

标签: .net ironruby

我是自托管IronRuby并且想要使用.NET程序集" Math.dll"它使用" Math" -namespace。我可以使用其他程序集但不能使用此程序集:

require "Math.dll"
require "Unsafe.dll"

consts = Math.constants
#consts = Unsafe.constants

consts.each { |const| 
  System::Console.WriteLine( const) 
}

它只返回" PI"和" E"由ruby数学模块给出。使用另一个程序集返回其中定义的.net类。托管程序以相同的方式使用这两个程序集。

DLR版本:1.1.0.1 Ironruby版本:1.1.0.0,1.1.3.0和1.1.4.0(2014年第6期)

1 个答案:

答案 0 :(得分:0)

此问题的解决方法,但不是一般解决方案:

  1. 获取源代码
  2. 在IronRuby.Library项目中更改

    [RubyModule("Math")]
    

    在RubyMath.cs中,或

    DefineGlobalModule("Math", typeof(IronRuby.Builtins.RubyMath), 0x0000000F, LoadMath_Instance, LoadMath_Class, LoadMath_Constants, IronRuby.Builtins.RubyModule.EmptyArray);
    
    <。>在Initializers.Generated.cs中,“Math”字符串(例如“Math __”)。

  3. 现在你可以把它结合起来:

    require "Math.dll"
    
    module Math
        include Math__
    end
    consts = Math.constants
    
    consts.each { |const| 
      System::Console.WriteLine( const) 
    }
    

    我不知道是否有任何依赖项受到影响。