我发现我无法轻易地从一个脚本库加载另一个脚本库:
模块.csx
string SomeFunction() {
return "something";
}
脚本.csx
ExecuteFile("module.csx");
SomeFunction() <-- causes compile error "SomeFunction" does not exist
这是因为编译器在编译 script.csx afaiu 时不知道 module.csx。我可以添加另一个脚本来从那个脚本加载两个文件,这样就可以了。然而,这并不是那么漂亮。
相反,我喜欢让我的脚本主机在我的脚本中检查特殊语法“加载模块”,并在实际脚本执行之前执行这些模块。
脚本.csx
// load "module.csx"
SomeFunction()
现在,通过一些基本的字符串处理,我可以确定要加载哪些模块(包含//load ... 的行)并加载该文件(此处要点 https://gist.github.com/4147064):
foreach(var module in scriptModules) {
session.ExecuteFile(module);
}
return session.Execute(script)
但是 - 因为我们在谈论 Roslyn,所以应该有一些很好的方法来解析脚本以获得我正在寻找的语法,对吧?
它甚至可能存在一种处理代码模块库的方法?
最佳答案
目前在 Roslyn 中无法引用另一个脚本文件。我们正在考虑将 #load
从交互窗口的主机命令移动到语言的一部分(如 #r
),但目前尚未实现。
至于如何处理字符串,你可以正常解析它,然后寻找未知类型的预处理器指令并以此方式深入结构。
关于c# - 如何从 Roslyn 脚本文件加载引用的脚本库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556859/