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



我是自托管的IronRuby,并且想使用一个使用"Math"命名空间的。net程序集"Math.dll"。我可以使用其他程序集,但不是这个:

require "Math.dll"
require "Unsafe.dll"
consts = Math.constants
#consts = Unsafe.constants
consts.each { |const| 
  System::Console.WriteLine( const) 
}

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

DLR-version: 1.1.0.1ironruby版本:1.1.0.0,1.1.3.0和1.1.4.0(2014年7月6日)

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

  1. 获取源代码
  2. 库项目更改

    [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__")。

现在你可以合并了:

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

我不知道是否有任何依赖关系受到影响

相关内容

  • 没有找到相关文章