2014-07-06 74 views
0

我自主託管IronRuby並希望使用使用「Math」命名空間的.NET程序集「Math.dll」。我可以使用其他程序集,但不是這一個:使用.NET程序集具有與IronRuby標準模塊相同的名稱和名稱空間

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

consts = Math.constants 
#consts = Unsafe.constants 

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

它只返回由紅寶石數學模塊給出的「PI」和「E」。使用其他程序集返回在其中定義的.net類。主機程序也以相同的方式使用這兩個程序集。

DLR-版本:1.1.0.1 IronRuby的版本:1.1.0.0,1.1.3.0和1.1.4.0(6炬力2014)

回答

0

的辦法解決這個問題,但沒有一個通用的解決方案:

  1. 獲取源代碼
  2. 在該行

    [RubyModule("Math")] 
    

    的IronRuby.Library項目變更RubyMath.cs或

    DefineGlobalModule("Math", typeof(IronRuby.Builtins.RubyMath), 0x0000000F, LoadMath_Instance, LoadMath_Class, LoadMath_Constants, IronRuby.Builtins.RubyModule.EmptyArray); 
    

    in Initializers.Generated.cs,「Math」字符串(例如, 「數學__」)。現在

,你可以結合起來:

require "Math.dll" 

module Math 
    include Math__ 
end 
consts = Math.constants 

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

我不知道是否有任何受影響的相關性。

相關問題