Re: Returning a CLR type from IronRuby
Paul Cowan <[email protected]> Tue, 3 Mar 2009 12:10:45 +0000
| Newsgroups | gmane.comp.windows.devel.dotnet.advanced |
|---|---|
| Message-ID | <[email protected]> |
It is definitely the right assembly and I did post the question on IronRuby but have not got an answer yet. When I find out if it is possilbe I will def. post my answer here. Cheers 2009/3/3 Fabian Schmied <[email protected]> > > Thanks Fabian but that has not worked. > > I am wondering if this is possible from IronRuby yet. > > I think it should be, are you sure you've loaded the right Assembly > into the engine? > If so, I'd recommend checking at a IronRuby discussion group. Share > the results here if you do so, please. > > Fabian > > > 2009/3/3 Fabian Schmied <[email protected]> > > > >> > [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'. > >> > >> While you'd probably get better answers at a Ruby-specific site, I'll > >> give it a try: The problem seems to be that IronRuby loads the > >> Horn.Core.DSL.Domain.dll assembly for a second time (and from a > >> different location), so the BuildMetaData type used by your IronRuby > >> class is not the same as the one used by the C# class. > >> > >> Can you try to do the following: > >> engine.Runtime.LoadAssembly (typeof (BuildMetaData).Assembly); // or > >> similar > >> > >> at the beginning? > >> > >> Fabian > >> > >> On Tue, Mar 3, 2009 at 7:22 AM, Paul Cowan <[email protected]> wrote: > >> > 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 > >> > > >> > > >> > >> =================================== > >> View archives and manage your subscription(s) at > >> http://peach.ease.lsoft.com/archives > >> > > > > =================================== > > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives > > > > > > =================================== > View archives and manage your subscription(s) at > http://peach.ease.lsoft.com/archives > =================================== View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives