Использовать сборку .NET с тем же именем и пространством имен, что и у стандартного модуля IronRuby.

Я самостоятельно размещаю IronRuby и хочу использовать сборку .NET «Math.dll», которая использует пространство имен «Math». Я могу использовать другие сборки, но не эту:

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 (6 июля 2014 г.)


person Max    schedule 06.07.2014    source источник


Ответы (1)


Обход этой проблемы, но не общее решение:

  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) 
}

Я не знаю, затронуты ли какие-либо зависимости.

person Max    schedule 07.07.2014