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
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top