Domanda

Vorrei utilizzare IronRuby con il sistema ERB per analizzare i file in formato .erb e ottenere l'output.

In Ruby sarebbe come:

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

Ma questo semplicemente non funziona nel mio progetto IronRuby.Ricevo un'eccezione relativa alla mancanza del file erb...quindi immagino che questo sia un problema di librerie.Ho quindi avviato il mio motore Ruby con i percorsi delle mie directory IronRuby, che quindi genera un'eccezione diversa:

allocator undefined for System::String
È stato utile?

Soluzione

Ho riscontrato un problema simile, ma stavo fornendo la stringa allo script come variabile locale tramite un ambito.La variabile locale era una stringa CLR .NET, che è ciò che ha causato il problema (per favore vedi qui).

La soluzione per me era convertire la stringa passata a ERB.new in una stringa Ruby utilizzando to_s.

Ecco un esempio (snippet Ruby):

require 'erb'

template = ERB.new(template_code.to_s)
template.result(binding)

La parte C# che ha richiamato lo script precedente:

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();

Nello snippet C# sopra, _bootstrapScript è una stringa che contiene lo snippet Ruby sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top