Verwenden von ERB in IronRuby Motor
Frage
Ich möchte IronRuby mit dem ERB -System verwenden, um die Formatdateien zu analysieren und die Ausgabe zu erhalten.
In Ruby wäre das wie:
require "erb"
erbContent = "..."
return ERB.new(erbContent,0,"%<>").result
Aber das funktioniert einfach nicht in meinem IronRuby -Projekt. Ich bekomme eine Ausnahme darüber, dass die Erb -Datei fehlt ... also denke ich, dass dies ein Bibliotheksproblem ist. Ich habe dann meinen Ruby -Motor mit den Wegen zu meinen IronRuby -Verzeichnissen initiiert, was dann eine andere Ausnahme ausführt:
allocator undefined for System::String
Lösung
Ich hatte ein ähnliches Problem, aber ich habe die Zeichenfolge dem Skript als lokale Variable durch einen Bereich zur Verfügung gestellt. Die lokale Variable war eine .NET -CLR -Zeichenfolge, was das Problem verursachte (Bitte siehe hier).
Die Lösung für mich bestand darin, die an erb.new übergebene Zeichenfolge mit to_s in eine Ruby -Zeichenfolge umzuwandeln.
Hier ist ein Beispiel (Ruby Snippet):
require 'erb'
template = ERB.new(template_code.to_s)
template.result(binding)
Der C# -Teil, der das obige Skript aufgerufen hat:
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();
Im obigen C# Snippet ist _BootstraprapScript eine Zeichenfolge, die den Ruby -Snippet oben enthält.