dachte ich heraus, dass ich nicht eine Script-Bibliothek von einem anderen leicht laden kann:Wie referenzierte Skriptbibliotheken aus einer Roslyn-Skriptdatei geladen werden?
module.csx
string SomeFunction() {
return "something";
}
script.csx
ExecuteFile("module.csx");
SomeFunction() <-- causes compile error "SomeFunction" does not exist
Dies ist, da der Compiler nicht von Modul nicht kennt. csx zu der Zeit kompiliert script.csx afaiu. Ich kann ein weiteres Skript hinzufügen, um die zwei Dateien von diesem zu laden, und das wird funktionieren. Aber das ist nicht so schön.
Stattdessen möchte ich meine Skripthost für eine spezielle Syntax "Modul laden" in meinen Skripts, und führen Sie diese Module vor der eigentlichen Skriptausführung.
script.csx
// load "module.csx"
SomeFunction()
nun mit einigen grundlegenden String-Handling, kann ich herausfinden, welche (Linien, die // Last enthält ...) zu laden Module und laden die Dateien (GIST hier https://gist.github.com/4147064) :
foreach(var module in scriptModules) {
session.ExecuteFile(module);
}
return session.Execute(script)
Aber - da wir Roslyn sprechen, sollte es einige nette Art und Weise sein, das Skript für die Syntax zu analysieren, die ich suche, nicht wahr?
Und es könnte sogar eine Möglichkeit geben, Modulbibliotheken von Code zu behandeln?
Eine erste Version der ganzen Sache: https://github.com/joeriks/RoslynWebScript – joeriks