我想使用IronRuby与ERB系统来解析。ERB格式文件并获得输出。
在ruby中应该是:
require "erb"
erbContent = "..."
return ERB.new(erbContent,0,"%<>").result
但是这在我的IronRuby项目中不起作用。我得到一个关于动词文件丢失的异常…所以我想这是图书馆的问题。然后我用IronRuby目录的路径启动了我的Ruby引擎,然后抛出了一个不同的异常:
allocator undefined for System::String
我有一个类似的问题,但是我通过作用域将字符串作为局部变量提供给脚本。局部变量是一个。net CLR字符串,这就是导致问题的原因(请参阅这里)。
我的解决方案是转换字符串传递给ERB。使用to_s.
下面是一个示例(Ruby代码片段):
require 'erb'
template = ERB.new(template_code.to_s)
template.result(binding)
调用上述脚本的c#部分:
var scriptEngine = Ruby.CreateEngine();
var templateCode = "my ERB template code goes here";
// Pass the template code to the Ruby script through a scope
var scope = _scriptEngine.CreateScope(new Dictionary<string, object>()
{
{"template_code", templateCode}
});
var result scriptEngine.Execute(_boostrapScript, scope).ToString();
在上面的c#代码片段中,_bootstrapScript是一个字符串,它包含上面的Ruby代码片段。