【发布时间】:2012-11-13 10:59:49
【问题描述】:
我发现我无法轻松地从另一个脚本库加载一个脚本库:
模块.csx
string SomeFunction() {
return "something";
}
script.csx
ExecuteFile("module.csx");
SomeFunction() <-- causes compile error "SomeFunction" does not exist
这是因为编译器在编译 script.csx afaiu 时并不知道 module.csx。我可以添加另一个脚本来从该脚本加载两个文件,这样就可以了。但是,那不是那么漂亮。
相反,我喜欢让我的脚本主机检查我的脚本中的特殊语法“加载模块”,并在实际执行脚本之前执行这些模块。
script.csx
// load "module.csx"
SomeFunction()
现在,通过一些基本的字符串处理,我可以确定要加载哪些模块(包含 // load ... 的行)并加载该文件(此处为要点https://gist.github.com/4147064):
foreach(var module in scriptModules) {
session.ExecuteFile(module);
}
return session.Execute(script)
但是 - 因为我们在谈论 Roslyn,所以应该有一些很好的方法来解析我正在寻找的语法的脚本,对吧?
它甚至可能存在一种处理模块库代码的方法?
【问题讨论】:
-
整个事情的第一个版本:github.com/joeriks/RoslynWebScript