我正在尝试从 Iron Ruby 返回一个 CLR 对象。
我在 C# 中定义了以下 CLR 类型
public class BuildMetaData
{
public string Description { get; set; }
}
我有以下 IronRuby 文件:
$:.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
我有以下测试失败:
[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");
}
尝试转换从 IronRuby 返回的对象时失败。
我收到以下错误消息:
[A]Horn.Core.DSL.Domain.BuildMetaData 无法转换为 [B]Horn.Core.DSL.Domain.BuildMetaData。类型 A 源自位置“C:\Projects\horn\branches\rubydsl\src\Horn”上下文“LoadNeither”中的“Horn.Core.DSL.Domain,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null” .Dsl.Specificatioin\bin\Debug\Horn.Core.DSL.Domain.dll'。类型 B 源自位置“C:\Users\paul.cowan\AppData\Local\Temp”上下文“Default”中的“Horn.Core.DSL.Domain,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null” \ 1vt2usw2.rxf \ Horn.Dsl.Specificatioin \ assembly \ dl3 \ 1d5ed945 \ 7c19e429_1a97c901 \ Horn.Core.DSL.Domain.DLL'。
是否可以从 Iron Ruby 返回 CLR 类型
从 C# 调用 Ruby 代码的首选方法如下:
var engine = IronRuby.Ruby.CreateEngine()
engine.ExecuteFile("test.rb")
var klass = engine.Runtime.Globals.GetVariable("MetaDataFactory")
var instance = engine.Operations.CreateInstance(klass)
engine.Operations.InvokeMember(instance, "return_meta_data")
~Jimmy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)