2011-12-03 51 views
0

我想使用IronRuby與ERB系統來解析.erb格式文件並獲取輸出。在IronRuby引擎中使用ERB

在紅寶石這將是這樣的:

require "erb" 
erbContent = "..." 
return ERB.new(erbContent,0,"%<>").result 

但在我的IronRuby項目這只是不工作。我得到一個關於erb文件丟失的例外......所以我想這是一個庫問題。然後,我開始我的紅寶石引擎的路徑我IronRuby的目錄,然後拋出一個不同的異常:

allocator undefined for System::String 

回答

2

我也有類似的問題,但我是通過一個範圍提供字符串到腳本的局部變量。 本地變量是一個.NET CLR字符串,這是造成問題的原因(please see here)。

我的解決方案是將傳遞給ERB.new的字符串轉換爲使用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片斷的字符串以上。