2014-07-06 10 views
0

Я являюсь владельцем хостинга IronRuby и хочу использовать сборку .NET «Math.dll», которая использует пространство имен «Math». Я могу использовать другие сборки, но это не один:Используйте сборку .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 (шестому Juli 2014)

ответ

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__").

Теперь вы можете объединить его:

require "Math.dll" 

module Math 
    include Math__ 
end 
consts = Math.constants 

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

Я не знаю, есть ли какие-либо зависимости пострадавших.