Returning a CLR type from IronRuby

Paul Cowan <[email protected]> Tue, 3 Mar 2009 06:22:11 +0000
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Message-ID <[email protected]>
Hi,

I am trying to return a CLR object from Iron Ruby.

I have the following CLR type defined in C#
public class BuildMetaData
{
    public string Description { get; set; }
}


I have the following IronRuby file:

$:.unshift(File.dirname(__FILE__) + '/../bin/Debug')
require 'mscorlib'
require 'Horn.Core.DSL.Domain'

class MetaDataFactory
    def return_meta_data()
        meta = Horn::Core::DSL::Domain::BuildMetaData.new
        meta.Description = "A description of sorts"
        meta
    end
end

I have the following test that is failing:

[Fact]
public void Then_a_build_metadata_object_is_returned()
{
    var engine = Ruby.CreateEngine();

    engine.ExecuteFile("test.rb");

    var code = String.Format("{0}.new.method :{1}", "MetaDataFactory",
"return_meta_data");

    var action = engine.CreateScriptSourceFromString(code).Execute();

    var result = (BuildMetaData)engine.Operations.Call(action);

    Assert.Equal(result.Description, "A description of sorts");
}




It fails when trying to cast the object returned from IronRuby.

I get the following error message:

[A]Horn.Core.DSL.Domain.BuildMetaData cannot be cast to
[B]Horn.Core.DSL.Domain.BuildMetaData. Type A originates from
'Horn.Core.DSL.Domain, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null' in the context 'LoadNeither' at location
'C:\Projects\horn\branches\rubydsl\src\Horn.Dsl.Specificatioin\bin\Debug\Horn.Core.DSL.Domain.dll'.
Type B originates from 'Horn.Core.DSL.Domain, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null' in the context 'Default' at location
'C:\Users\paul.cowan\AppData\Local\Temp\1vt2usw2.rxf\Horn.Dsl.Specificatioin\assembly\dl3\1d5ed945\7c19e429_1a97c901\Horn.Core.DSL.Domain.DLL'.

The only way I can access the members of the BuildMetaData is using
reflection.

If you look at the error message, both types are in different locations.

Is there a way round this yet in Ironruby?

Cheers

Paul

===================================
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives